NHibernate多对一级联

NHibernate多对一级联,nhibernate,many-to-many,one-to-many,one-to-one,Nhibernate,Many To Many,One To Many,One To One,我有以下两门课: public class Project { public virtual int ProjectId { get; set; } public virtual string ProjectName { get; set; } public virtual LegalEntity LegalEntity { get; set; } } 及 映射为: <class name="Project" table="Project" dynamic-up

我有以下两门课:

public class Project
{

    public virtual int ProjectId { get; set; }
    public virtual string ProjectName { get; set; }
    public virtual LegalEntity LegalEntity { get; set; }
}

映射为:

<class name="Project" table="Project" dynamic-update="true">
  <id name="ProjectId">
    <generator class="native"/>
  </id>  

  <property name="ProjectName" />
  <many-to-one name="LegalEntity" column="LegalEntId" fetch="join" cascade="all-delete-orphan" />


</class>

在数据库中,项目表有一个FK到LegalEntity的PK列。一个项目只有一个法人实体。不同的项目可以有相同的法律实体。因此,这就是我选择多对一的原因。但不确定这是否正确

插入和更新工作正常。但是,如果我在项目中更新了一个法律实体id,并且该法律实体成为孤立实体,我希望它被删除。但这并没有发生。我对删除所有孤儿的理解是错误的吗?如果是,如何实现此行为?

多对一级联不支持全部删除孤立项,请参阅:

现在,所有delete-orphan和delete-orphan都已经实现了多对一,如您在本文中所看到的

当OP询问这些问题时,或者在什么时候,这些都不被支持,但我认为未来的访问者会欣赏更新

报告也更新了,现在说:

级联=全部|无|保存更新|删除|删除孤立项|全部删除孤立项

但文档现在令人困惑,因为它仍然有以下注释: “级联”属性允许以下值:全部、保存更新、删除、无。 因此,我创建了修复文档的最后一部分。

谢谢您的回复。在SQL中,我会执行以下查询:select*from LegalEnt,其中LegalEntId不在select LegalEntId from Project中NH中的等效查询是什么?在NHibernate中几乎相同;检查哪里可以快速了解如何使用QueryOver。。。或者在这里问;谢谢拉迪姆。你的帖子很有用。我不能正确使用QueryOver。如果你能帮我把上面的SQL转换成NH,我将非常感激。我将向你展示如何。。。也许今天晚些时候,但我会的。我扩展了我的答案,认为它应该是你可以用来获得孤儿名单的东西。。。迭代并删除它们。。。还有,也许可以查一下这个:DML-
<class name="Project" table="Project" dynamic-update="true">
  <id name="ProjectId">
    <generator class="native"/>
  </id>  

  <property name="ProjectName" />
  <many-to-one name="LegalEntity" column="LegalEntId" fetch="join" cascade="all-delete-orphan" />


</class>
<class name="LegalEntity" table="LegalEnt" dynamic-update="true">

  <id name="LegalEntId">

    <generator class="native"/>

  </id>



  <property name="Name" />    

</class>
<many-to-one
    ...
    cascade="all|none|save-update|delete"              (4)
    ...
// subquery
var subquery = QueryOver.Of<Project>()
    .Select(x => x.LegalEntity.LegalEntId);

// just these legal entities, which are NOT used
var query = session.QueryOver<LegalEntity>()
    .WithSubquery
      .WhereProperty(y => y.LegalEntId)
      .NotIn(subquery)
    ;

// orphans
var list = query
    .List<LegalEntity>();