gpt4 book ai didi

nhibernate - 多对多关系 : How to decide where to place inverse=true with XML Mapping

转载 作者:行者123 更新时间:2023-12-02 07:42:24 24 4
gpt4 key购买 nike

我在阅读一对多关系中的 inverse = true 时实际上想知道在多对多关系中在哪里将该属性设置为 true。我知道 inverse 是指向哪个实体/表是关系的所有者。在一对多的情况下,这实际上非常简单。购买你如何在多对多关系中指向一边?还是没有必要?

你能指出两边吗?还是必须选择一侧?你如何决定那是哪一边?如果我认为根据关系的所有者,我认为两组都必须设置 inverse=true,因为它们都不是关系的所有者。但实际上对方也不是主人。表 UsersTargets 是所有者。有谁能把我从迷雾中解救出来?

例如:一个用户可以有多个奖项。注意:没有必要知道有多少用户获得了特定的奖励。所以也许我应该让我的模型与众不同?无论如何我的代码到现在:

域:

public class User : Entity
{
...
public virtual ISet<Award> Awards { get; set; }
}

public class Award : Entity
{
...
public virtual ISet<User> Users { get; set; }
}

映射:

<-User.hbm.xml->
<set name="Awards" table="UsersAwards" cascade="all">
<key column="UserId"/>
<many-to-many class="Award" column="AwardId"/>
</set>

<-Award.hbm.xml->
<set name="Users" table="UsersAwards" cascade="all">
<key column="AwardId"/>
<many-to-many class="User" column="UserId"/>
</set>

提前致谢。

最佳答案

恰好关系的一侧应该标记为inverse。这意味着如果您决定从模型中删除 Award.Users 属性,只需确保 Users.Awards 未标记为 inverse

如果您将两个集合都保留在您的模型中,并且您使用这样的代码来添加/删除关联...

public class User
{
public virtual void Add(Award award)
{
award.Users.Add(this);
Awards.Add(award);
}

public virtual void Remove(Award award)
{
Awards.Remove(award);
award.Users.Remove(this);
}
}

...那么将 inverse 放在哪一侧并不重要 - 只要确保一侧有它而另一侧没有。

关于nhibernate - 多对多关系 : How to decide where to place inverse=true with XML Mapping,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9745272/

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