流利的NHibernate多对多
我正在使用Fluent NHibernate并且遇到一些问题,我的一个类可以设置多对多的关系。 这可能是一个愚蠢的错误,但我已经陷入了一点点试图让它运作。 无论如何,我有几个有许多关系的课程。
public class Person { public Person() { GroupsOwned = new List(); } public virtual IList GroupsOwned { get; set; } } public class Groups { public Groups() { Admins= new List(); } public virtual IList Admins{ get; set; } }
映射看起来像这样
人:……
HasManyToMany(x => x.GroupsOwned) .WithTableName("GroupAdministrators") .WithParentKeyColumn("PersonID") .WithChildKeyColumn("GroupID") .Cascade.SaveUpdate();
团体:……
HasManyToMany(x => x.Admins) .WithTableName("GroupAdministrators") .WithParentKeyColumn("GroupID") .WithChildKeyColumn("PersonID") .Cascade.SaveUpdate();
当我运行集成测试时,基本上我正在创建一个新人和组。 将组添加到Person.GroupsOwned。 如果我从存储库中获取Person对象,则GroupsOwned等于初始组,但是,当我检查Group.Admins上的计数时,如果我返回组,则计数为0. Join表具有GroupID和PersonID保存在其中。
感谢您的任何建议。
它向表中添加两条记录这一事实看起来就像缺少一个反向属性 。 由于人和组都在被更改,因此NHibernate将关系持续两次(每个对象一次)。 inverse属性专门用于避免这种情况。
我不确定如何在代码中添加映射,但链接显示了如何在XML中执行它。
@Santiago我认为你是对的。
答案可能只是你需要删除一个ManyToMany声明,更多关注Fluent看起来它可能足够聪明,只为你做。
您确定要将人员添加到Groups.Admin吗? 你必须做两个链接。
你有三张桌子吗?
人员,组和GroupAdministrators
当你添加到双方时,你会得到
人(ID为p1)组(ID为g1)
在GroupAdministrators中,您有两列和一个具有的表
(P1,G1)
(P1,G1)
并且您的unit testing代码如下所示。
Context hibContext //Built here Transaction hibTrans //build and start the transaction. Person p1 = new Person() Groups g1 = new Groups() p1.getGroupsOwned().add(g1) g1.getAdmins().add(p1) hibTrans.commit(); hibContext.close();
然后在你的测试中你创建一个新的上下文,并测试以查看上下文中的内容,然后你找回正确的内容,但是你的表格都被搞砸了?
上述就是C#学习教程:流利的NHibernate多对多分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1010076.html