当前位置:  开发笔记 > 编程语言 > 正文

流利的NHibernate多对多

如何解决《流利的NHibernate多对多》经验,为你挑选了2个好方法。

我正在使用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保存在其中.

感谢您的任何建议.



1> Santiago Pal..:

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

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


这不应该被标记为正确答案吗?

2> emeryc..:

@Santiago我认为你是对的.

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

推荐阅读
小白也坚强_177
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有