我有一个有很多订单的实体公司。我将它们映射如下:
公司
HasMany(x => x.Orders).KeyColumn("CompanyID").Cascade.All().Inverse();
命令
References(x => x.Company).Column("CompanyID")
但是,当我为公司创建一个新订单并尝试保存它时,我收到一条 SQL 错误:“无法将值 NULL 插入 'CompanyID' 列,表 'Orders';列不允许空值。插入失败。”
(这是生成的 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);
顺便说一句,更新一切顺利。
无论如何,我希望这里有人能看到我在映射中做错了什么。
提前致谢。