【问题标题】:NHibernate fluent HasMany mapping inserts NULL Foreign keyNHibernate fluent HasMany 映射插入 NULL 外键
【发布时间】:2012-06-28 22:06:38
【问题描述】:

我有一个有很多订单的实体公司。我将它们映射如下:

公司

HasMany(x => x.Orders).KeyColumn("CompanyID").Cascade.All().Inverse();

订购

References(x => x.Company).Column("CompanyID")

但是,当我为公司创建一个新订单并尝试保存它时,我收到一条 SQL 错误:“无法将值 NULL 插入 'CompanyID' 列,表 'Orders';列不允许空值。INSERT 失败。”

(这是生成的 SQL 语句:INSERT INTO Order (Name, CompanyID) VALUES (?, ?); select SCOPE_IDENTITY()]])

这是一个逻辑错误,因为我确实将 CompanyID 设置为不可为空。

但是,相反,我希望 CompanyID 填充正确的 ID,但在我的一生中,我无法让它工作。我尝试删除 Inverse(行为根本没有改变),更改级联,将引用设置为不可为空。

我什至使表格中的列可以为空,以幽默 NHibernate。但这给我留下了一个孤立的订单,因为它确实创建了订单记录,但将 CompanyID 保留为 NULL。

这是我下订单的测试代码:

Company test = RepositoryBase<Company>.GetById(1);
test.Orders.Add(new Order("test"));
RepositoryBase<Company>.SaveWithTransaction(test);

顺便说一句,更新一切顺利。

无论如何,我希望这里有人能看到我在映射中做错了什么。

提前致谢。

【问题讨论】:

    标签: c# fluent-nhibernate fluent-nhibernate-mapping


    【解决方案1】:

    您忘记在订单上设置公司

    test.Orders.Add(new Order("test") { Company = test });
    

    inverse 仅告诉 NH order 使用 Order 对象上对 Company 的引用来插入 Id。

    【讨论】:

      【解决方案2】:

      先添加这个!!!

      test.Orders.Add(new Order("test"){Company = test});
      

      【讨论】:

      • @Tushar 我不知道!不记得了。
      • O_O。这就是为什么您应该解释答案中的代码。 :)
      • @Tushar 见上文! :P
      • 这里的实际推理是什么?
      猜你喜欢
      • 2013-04-24
      • 2012-04-03
      • 2012-10-19
      • 1970-01-01
      • 2014-05-26
      • 1970-01-01
      • 2013-09-01
      • 1970-01-01
      • 2011-04-15
      相关资源
      最近更新 更多