我正在使用 Fluent NHibernate 试图提高使用旧数据库的 Web 应用程序的可测试性和可维护性,但我在正确映射此结构时遇到了一些麻烦:
我有两个表,它们真正代表域中的一个实体,因此我使用连接来映射它们,第三个表代表第二个实体。
数据库表:
[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");
}
这适用于我的 Gets,但是当我修改 Account.ReportType.Number 和 SaveOrUpdate() Account 时,我收到错误消息:“DataTest.Model.ReportType 实例的标识符已从 (old_value) 更改为 (new_value)” .
我要做的就是修改 Account 对 ReportType 的引用,我认为通过在 ReportType 的引用上设置 Cascade.None() 属性,NHibernate 也不会尝试保存 ReportType 实例,但我一定是误解了作品。我试过制作 ReportType ReadOnly(),引用 ReportType ReadOnly() 等,但似乎没有任何帮助。
有任何想法吗?