nhibernate осиротел многие-ко-многим как индивидуальный класс - PullRequest
1 голос
/ 29 ноября 2011

У меня есть сопоставленный класс 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 на ноль.Как мне заставить его удалить всю запись вместо этого?

...