Я использую 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() и т. Д., И ничего не помогает.
Любые идеи?