我使用功能NHibernate在試圖提高在Web應用程序的可測試性和可維護性正在使用舊的數據庫,我遇到了一些麻煩正確映射這種結構:功能NHibernate加入引用忽略級聯規則
我有兩個表格確實代表了域中的一個實體,所以我使用連接來映射它們,第三個表格代表第二個實體。
DB表:
[eACCT]
ACCT_ID
ACCT_NAME
[eREPORT_TYPE]
ACCT_ID
REPORT_NO
[eREPORT_TYPE_DESC]
REPORT_NO
REPORT_TYPE
實體:
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; }
}
映射:
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");
}
這正常工作對我的獲取,B當我修改Account.ReportType.Number然後SaveOrUpdate()Account時,我得到錯誤:'DataTest.Model.ReportType實例的標識符已從(old_value)更改爲(new_value)'。
我想要做的就是修改Account對ReportType的引用,我認爲通過在引用ReportType上設置Cascade.None()屬性,NHibernate不會嘗試保存ReportType實例,但我必須誤解這是如何工作的。我試着做ReportType ReadOnly(),使對ReportType ReadOnly()等的引用,似乎沒有任何幫助。
任何想法?