当前位置: 首页 > 编程语言 > C#

流畅的nHibernate – 使用复合键映射孩子产生空引用分享

时间:2023-04-10 15:49:27 C#

C#学习教程:FluentnHibernate-使用复合键映射子项产生空引用.我在添加新的子对象时遇到了问题,它获得了父引用。所以我会这样添加对象..varparent=newParent{Children=newList{newChild{Other=otherReference}}};甚至使用Add()方法添加它...parent.Children.Add(newChild{Other=other});对Parent的引用不是高级的。它最终只是一个空属性。我得到以下异常。{“无法将NULL值插入列‘ParentId’,表‘mssql_test.Children’;列不允许空值。插入失败。rn语句终止。”}我可以这样做...newChild{Parent=parentReference,Other=otherReference}但这似乎有点多余。我的理解是它应该能够自己推导出引用。如果这不可能,也许我只是误会。谁能帮我?我在下面概述了我的代码。classclassParent{intId{get;放;}IListChildren{get;放;}}classOther{intId{get;放;}}classChild{ParentParent{get;放;}其他其他{得到;放;}//其他属性}MappingChildMap(){CompositeId().KeyReference(x=>x.Parent,"ParentId").KeyReference(x=>x.Other,"OtherId");}ParentMap(){HasManyToMany(x=>x.Children).AsBag().ChildKeyColumns.Add(new[]{"ParentId","OtherId"}).Inverse().Cascade.All()).Table(“[测试]”);正如@KeithS指出的那样,问题是您将子集合映射为HasManyToMany,它应该是HasMany。地图的外观如下:ChildMap(){CompositeId()//Thisisgood.KeyReference(x=>x.Parent,"ParentId").KeyReference(x=>x.Other,"OtherId");}ParentMap(){//这是修复HasMany(c=>c.Children).Inverse().Cascade.All().KeyColumn("ParentId")//如果ParentIdprop映射到ParentIdcol则不需要。表(“[测试]”);您没有将Parent映射为Child的属性。NHibernate(和FluentNH)只映射你告诉他们的;你的对象上可以有十几个字段,但如果你只映射其中一个字段,那么NH为你提供的所有字段都是实例。您应该在映射中为Parent添加一个“References”方法,将Parent的关键字段指定为FK引用。这应该为您提供对象层次结构中的“反向引用”。此外,看起来在父端而不是多对多,你应该只有一对多(使用HasMany)。一位父母可以有很多孩子,但一个孩子只有一个孩子。ManyToMany可能有效,但它会在Parent和Child之间创建一个冗余的交叉引用表。以上就是C#学习教程:smoothnHibernate——使用复合键映射children生成空引用。如果对大家有用,需要了解更多C#学习教程,希望大家多多关注——本文来自网络收集,不代表立场,如涉及侵权,请点击右转联系管理员删除。如需转载请注明出处: