gpt4 book ai didi

nhibernate - FluentNhibernate 多对多和 Inverse()

转载 作者:行者123 更新时间:2023-12-01 11:01:41 26 4
gpt4 key购买 nike

我定义了以下数据库表:

俱乐部:身份证、姓名

成员:身份证、姓名

ClubMember: ClubId, MemberId

我定义了以下实体类:

    public class Club() {
public virtual int Id { get; set; }
public virtual string Name { get; set; }
public virtual IList<Member> Members { get; set; }
}

public class Member() {
public virtual int Id { get; set; }
public virtual string Name { get; set; }
public virtual IList<Club> Clubs { get; set; }
}

我定义了以下覆盖:

    public class MemberOverride : IAutoMappingOverride<Member>
{
public void Override(AutoMapping<Member> mapping_)
{
mapping_
.HasManyToMany(x_ => x_.Clubs)
.ParentKeyColumn("MemberId")
.ChildKeyColumn("ClubId")
.Cascade.All()
.Table("ClubMembers");
}
}

public class ClubOverride : IAutoMappingOverride<Club>
{
public void Override(AutoMapping<Club> mapping_)
{
mapping_
.HasManyToMany(x_ => x_.Members)
.ParentKeyColumn("ClubId")
.ChildKeyColumn("MemberId")
.Inverse()
.Table("ClubMembers");
}
}

我可以从我的重写中看出,ClubOverride 上的 Inverse 意味着你不能执行以下操作

    session.Save(club.Members.Add(member));

但这行得通:

    session.Save(member.Clubs.Add(club);

但这不符合逻辑。我希望能够保存带成员的俱乐部或带俱乐部的成员。

我是否正在尝试使用 FluentNhibernate 做一些不可能的事情?

TIA

最佳答案

是的,你是对的,那是不可能的。但这不是 FluentNhibernate 的问题,NHibernate 就是这样工作的。

只有一方是关系的所有者并负责添加元素。

来自官方文档:

Changes made only to the inverse end of the association are not persisted. This means that NHibernate has two representations in memory for every bidirectional association, one link from A to B and another link from B to A. This is easier to understand if you think about the .NET object model and how we create a many-to-many relationship in C#:

关于nhibernate - FluentNhibernate 多对多和 Inverse(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10016795/

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