NHibernate流畅的HasMany映射插入NULL外键
我有一个有很多订单的实体公司。 我将这些映射为彼此:
公司
HasMany(x => x.Orders).KeyColumn("CompanyID").Cascade.All().Inverse();
订购
References(x => x.Company).Column("CompanyID")
但是,当我为公司创建新订单并尝试保存它时,我收到一个SQL错误:“无法将值NULL插入列’CompanyID’,表’订单’;列不允许空值.INSERT失败。”
(这是生成的SQL语句:INSERT INTO Order(Name,CompanyID)VALUES(?,?); select SCOPE_IDENTITY()]])
这是一个逻辑错误,因为我确实将CompanyID设置为不可为空。
然而,反过来我预计CompanyID会被正确的ID填充,但是在我的生活中,我无法让它工作。 我尝试删除Inverse(行为根本没有改变),更改了级联,将引用设置为不可为空。
我甚至将列中的列作为Nullable来幽默NHibernate。 但是这给我留下了一个孤立的Order,因为它确实创建了Order记录但是将CompanyID留给了NULL。
这是我的测试代码,我做了新订单:
Company test = RepositoryBase.GetById(1); test.Orders.Add(new Order("test")); RepositoryBase.SaveWithTransaction(test);
顺便说一句,更新都很顺利。
无论如何,我希望有人能在我的映射中看到我做错了什么。
提前致谢。
你忘了在订单上设置公司
test.Orders.Add(new Order("test") { Company = test });
inverse只告诉NH该订单使用Order对象上的Company引用来插入Id。
先添加!!!
test.Orders.Add(new Order("test"){Company = test});