gpt4 book ai didi

c# - 流利的 NHibernate 多对多

转载 作者:IT王子 更新时间:2023-10-29 04:29:28 24 4
gpt4 key购买 nike

我正在使用 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; }
}

映射看起来像这样

人:……

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

组:...

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

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

感谢您的任何建议。

最佳答案

它正在向表中添加两条记录的事实看起来像您缺少 inverse attribute .由于人和组都在改变,NHibernate 将关系保持两次(每个对象一次)。 inverse 属性专门用于避免这种情况。

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

关于c# - 流利的 NHibernate 多对多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/108396/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com