gpt4 book ai didi

c# - NHibernate fluent HasMany映射插入NULL外键

转载 作者:太空狗 更新时间:2023-10-29 23:09:36 24 4
gpt4 key购买 nike

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

公司

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 设置为不可为空。

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

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

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

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

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

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

提前致谢。

最佳答案

您忘记在订单上设置公司

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

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

关于c# - NHibernate fluent HasMany映射插入NULL外键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11244609/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com