0

Я использую Fluent NHibernate в попытке улучшить проверяемость и ремонтопригодность на веб-приложение, которое использует устаревшую базу данных и у меня возникают некоторые проблемы с отображением этой структуры правильно:Fluent NHibernate Регистрация Ссылки Игнорирование Cascade Правило

У меня есть две таблицы, которые действительно представляют один объект в домене, и поэтому я использую объединение для их сопоставления как такового и третьей таблицы, представляющей второй объект.

DB Таблицы:

[eACCT] 
    ACCT_ID 
    ACCT_NAME 

[eREPORT_TYPE] 
    ACCT_ID 
    REPORT_NO 

[eREPORT_TYPE_DESC] 
    REPORT_NO 
    REPORT_TYPE 

Entities:

public class Account 
{ 
    public virtual string AccountID { get; set; } 
    public virtual string AccountName { get; set; } 
    public virtual ReportType ReportType { get; set; } 
} 

public class ReportType 
{ 
    public virtual int Number { get; set; } 
    public virtual string Type { get; set; } 
} 

Mapping:

public AccountMap() 
    { 
     Table("eACCT"); 
     Id(x => x.AccountID, "ACCT_ID"); 
     Map(x => x.AccountName, "ACCT_NAME"); 

     Join("eREPORT_TYPE", m => 
     { 
      m.KeyColumn("ACCT_ID"); 
      m.References(x => x.ReportType) 
       .Cascade.None() 
       .Column("REPORT_NO"); 
     }); 
    } 

    public ReportTypeMap() 
    { 
     Table("eREPORT_TYPE_DESC"); 
     Id(x => x.Number) 
      .Column("REPORT_NO") 
      .GeneratedBy.Assigned(); 
     Map(x => x.Type, "REPORT_TYPE"); 
    } 

Это прекрасно работает для моего Гец, б ut, когда я изменяю Account.ReportType.Number, а затем SaveOrUpdate() Учетная запись, я получаю ошибку: «Идентификатор экземпляра DataTest.Model.ReportType был изменен с (old_value) на (new_value)».

Все, что я хочу сделать, это изменить ссылку Аккаунта на ReportType, и я подумал, что, установив свойство Cascade.None() в ссылку на ReportType, NHibernate не попытается также сохранить экземпляр ReportType, но я должен Непонятно, как это работает. Я попытался сделать ReportType ReadOnly(), сделав ссылку на ReportType ReadOnly() и т. Д., И ничего не помогает.

Любые идеи?

ответ

0

Окончательно решена эта проблема. Оказывается, я не думал об этом в NHibernate. На мой взгляд, у меня появился новый ReportType.Number, поэтому мне нужно было обновить. В действительности, мне нужно было сделать ReportType с новым типом ReportType.Number и установить Account.ReportType. Выполнение этого так работало, как ожидалось.