流利的NHibernate多对多

Rya*_*aux 22 c# nhibernate fluent fluent-nhibernate

我正在使用Fluent NHibernate并且遇到一些问题,我可以通过其中一个类来设置多对多的关系.这可能是一个愚蠢的错误,但我已经陷入了一点点试图让它运作.无论如何,我有几个有很多关系的课程.

public class Person
{
    public Person()
    {
        GroupsOwned = new List<Groups>();
    }

    public virtual IList<Groups> GroupsOwned { get; set; }
}

public class Groups
{
    public Groups()
    {
        Admins= new List<Person>();
    }

    public virtual IList<Person> Admins{ get; set; }
}
Run Code Online (Sandbox Code Playgroud)

映射看起来像这样

人:......

HasManyToMany<Groups>(x => x.GroupsOwned)
    .WithTableName("GroupAdministrators")
    .WithParentKeyColumn("PersonID")
    .WithChildKeyColumn("GroupID")
    .Cascade.SaveUpdate();
Run Code Online (Sandbox Code Playgroud)

团体:......

 HasManyToMany<Person>(x => x.Admins)
    .WithTableName("GroupAdministrators")
    .WithParentKeyColumn("GroupID")
    .WithChildKeyColumn("PersonID")
    .Cascade.SaveUpdate();
Run Code Online (Sandbox Code Playgroud)

当我运行集成测试时,基本上我正在创建一个新的人和组.将组添加到Person.GroupsOwned.如果我从存储库中获取Person对象,则GroupsOwned等于初始组,但是,当我检查Group.Admins上的计数时,如果我返回组,则计数为0. Join表具有GroupID和PersonID保存在其中.

感谢您的任何建议.

San*_*ino 39

它向表中添加两条记录这一事实看起来就像缺少一个反向属性.由于人和组都被更改,因此NHibernate将关系持续两次(每个对象一次).inverse属性专门用于避免这种情况.

我不确定如何在代码中添加映射,但链接显示了如何在XML中执行它.

  • 这不应该被标记为正确答案吗? (3认同)

eme*_*ryc 7

@Santiago我认为你是对的.

答案可能只是你需要删除一个ManyToMany声明,更多关注Fluent看起来它可能足够聪明,只为你做.