NHibernate - каскадное удаление не работает - PullRequest
1 голос
/ 30 декабря 2011

Я использую NHibernate 3.2 с MS SQL Server 2008 R2

У меня есть следующие отображения

<class name="LocalizedProperty" table="LocalizedProperty">
   <cache usage="read-write"/>
   <id name="Id" column="Id">
      <generator class="guid.comb"/>
   </id>
   <property name="CultureName"  not-null="true"/>
   <property name="PropertyName"  not-null="true"/>
   <property name="PropertyValue"  not-null="true"/>

   <any id-type="Guid" name="Entity">
      <column name="LocalizedEntityClass"  not-null="true"/>
      <column name="EntityId"  not-null="true"/>
   </any>
</class>

А у этого есть Ссылка на LocalizedProperty:

<class name="CommunicationType" table="CommunicationType" lazy="false"  >
...
<set name="LocalizedProperties" where="LocalizedEntityClass = 'Prayon.Entities.CommunicationType'" cascade="delete">
  <key column="EntityId" foreign-key="none" />
  <one-to-many class="LocalizedProperty" />
</set>
</class>

Моя проблема в том, что когда я удаляю сущность CommunicationType, NHibernate выполняет следующий оператор обновления для LocalizedProperty

UPDATE LocalizedProperty SET EntityId = null WHERE EntityId = @p0 AND (LocalizedEntityClass = 'Prayon.Entities.CommunicationType')

Вместо оператора удаления.

Кто-то видит, что не так?

Ответы [ 2 ]

2 голосов
/ 31 декабря 2011

Для удаления дочерних элементов таблицы необходимо указать cascade = "all-delete-orphan" .

<bag name="TableClassName" table="TableClassName" cascade="all-delete-orphan" >
    <key column="PrimaryKey"/>
    <one-to-many class="NameSpace.TableClassName" />

0 голосов
/ 10 сентября 2015

Если вы поставите полностью удалить сироту, проблема заключается во всей части. Он будет каскадировать все действия, а не только удаление.

...