У меня есть сопоставленный класс nHibernate с несколькими отношениями многие-к-одному, где у меня есть cascade = "all-delete-orphan".Это прекрасно работает для классов с одним отношением внешнего ключа.Затем у меня есть сопоставления с таблицами, которые представляют собой таблицы «многие ко многим» с дополнительными столбцами.Так как есть дополнительные столбцы, я объявляю «многие ко многим» как свой собственный класс, а затем сопоставляю родительский класс с дочерним классом.
Parent:
<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>
Child, который являетсяне каскадный:
<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>
Я думаю, что проблема связана сID в таблице, которая не является каскадной.nHibernate не видит это как потерянный, так как RelatedID все еще там, например, существует существующий ссылочный ключ.Только родитель, LayerUID, действительно должен быть тем, на что смотрит nHibernate и игнорирует все остальное.То, что мне нужно, - это когда слой удаляется, так же и связанный уровень.Тем не менее, он просто устанавливает LayerUID на ноль.Как мне заставить его удалить всю запись вместо этого?