我正在使用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看起来它可能足够聪明,只为你做.