我有一个nHibernate映射类,有几个多对一关系,我有cascade =“all-delete-orphan” . 这适用于只有一个外键关系的类 . 然后我对表格进行映射,这些表格实际上是带有额外列的多对多表格 . 由于有额外的列,我将多对多声明为自己的类,然后将父映射到子类 .

家长:

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"  assembly="ReviewData"amespace="ACS.CSG.ReviewData.Domain">
  <class name="Review" table="rcs.tblReview" lazy="true">
    <cache usage="read-write"/>

    <id name="ID">
      <column name="ReviewUID" />
      <generator class="guid" />
    </id>
    <property name="Title" type="string" length="255" column="RTitle" />
    <property name="Description" type="string" column="RDescription" />

    <bag name="Notes" lazy="true" cascade="all-delete-orphan">
      <key column="EntityUID"/>
      <one-to-many class="Note" />
    </bag>

    <bag name="RelatedReviews" lazy="true" cascade="all-delete-orphan">
      <key column="EntityID"/>
      <one-to-many class="Relation" />
    </bag>
  </class>
</hibernate-mapping>

没有级联的孩子:

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"  assembly="ReviewData" namespace="ACS.CSG.ReviewData.Domain">
  <class name="Relation" table="rcs.tblRelation_Link" lazy="true">
    <cache usage="read-write"/>

    <id name="ID">
      <column name="RelationID" />
      <generator class="native" />
    </id>
    <property name="RelatedID" type="guid" not-null="true" column="RelatedID" />
    <many-to-one class="Lookup" name="Relationship" column="Relationship" />
  </class>
</hibernate-mapping>

级联的孩子:

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"  assembly="ReviewData" namespace="ACS.CSG.ReviewData.Domain">
  <class name="Note" table="rcs.tblNotes" lazy="true">
    <cache usage="read-write"/>

    <id name="ID">
      <column name="NoteID" />
      <generator class="native" />
    </id>
    <property name="Text" type="string" not-null="true" column="NoteText" />
    <many-to-one class="Lookup" name="AttachType" column="AttachType" />
  </class>
</hibernate-mapping>

我认为问题是表中没有级联的RelatedID . nHibernate并不认为这是一个孤儿,因为RelatedID仍然存在,例如仍然存在现有的参考密钥 . 只有父,LayerUID才真正应该是nHibernate所关注的,而忽略了其余的 . 我需要做的是删除Layer时,RelatedLayer也是如此 . 但是,它只是将LayerUID设置为null . 如何让它删除整个记录呢?