【问题标题】:Fluent NHibernate Joined References Ignoring Cascade RuleFluent NHibernate 连接引用忽略级联规则
【发布时间】:2010-10-14 17:59:48
【问题描述】:

我正在使用 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) 更改为 (新值)'。

我想要做的就是修改 Account 对 ReportType 的引用,我认为通过在 ReportType 引用上设置 Cascade.None() 属性,NHibernate 也不会尝试保存 ReportType 实例,但我必须误解它是如何工作的。我尝试过制作 ReportType ReadOnly()、引用 ReportType ReadOnly() 等,但似乎没有任何帮助。

有什么想法吗?

【问题讨论】:

    标签: join fluent-nhibernate nhibernate-mapping nhibernate-cascade


    【解决方案1】:

    终于解决了这个问题。原来我并没有以 NHibernate 的方式考虑这个问题。在我看来,我有一个新的 ReportType.Number,所以这就是我需要更新的内容。实际上,我需要做的是使用新的 ReportType.Number 获取 ReportType 并设置 Account.ReportType。这样做可以按预期进行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多