您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

何时在NHibernate / Hibernate OneToMany关系上使用inverse = false?

何时在NHibernate / Hibernate OneToMany关系上使用inverse = false?

正如Matthieu所说,唯一不想设置inverse = true的情况是,孩子对自己负责更新本身是没有意义的,例如孩子不了解其父母。

让我们尝试一个现实世界,而不是完全没有人为的示例:

<class name="SpyMaster" table="SpyMaster" lazy="true">
  <id name="Id">
    <generator class="identity"/>
  </id>
  <property name="Name"/>
  <set name="Spies" table="Spy" cascade="save-update">
    <key column="SpyMasterId"/>
    <one-to-many class="Spy"/>
  </set>
</class>

<class name="Spy" table="Spy" lazy="true">
  <id name="Id">
    <generator class="identity"/>
  </id>
  <property name="Name"/>
</class>

间谍主管可以有间谍,但间谍永远不知道自己的间谍主管是谁,因为我们没有在间谍类中包括多对一关系。同样(方便地),间谍可能会变成流氓,因此不需要与间谍主管关联。我们可以如下创建实体:

var sm = new SpyMaster
{
    Name = "Head of Operation Treadstone"
};
sm.Spies.Add(new Spy
{
    Name = "Bourne",
    //SpyMaster = sm // Can't do this
});
session.Save(sm);

在这种情况下,您可以将FK列设置为可空值,因为保存sm的操作会插入SpyMaster表和Spy表中,只有在此之后,它才会更新Spy表以设置FK。在这种情况下,如果我们将inverse = true设置为FK,则永远不会更新。

dotnet 2022/1/1 18:16:07 有572人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶