NHibernate - установить ссылку на ноль при удалении - PullRequest
2 голосов
/ 22 ноября 2011

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

<class name="Activity" table="Activity" lazy="false"  >
<cache usage="read-write"/>
<id name="Id" column="Id" type="Guid">      
                <generator class="assigned"/>
</id>
<property name="Subject" column="Subject" type="String" length="255"  />
<many-to-one  name="ParentActivity" class="Activity" foreign-key="FK_Activity_ParentActivity" lazy="proxy" fetch="select">
    <column name="ParentActivityId"/>
</many-to-one>
<set name="Activities" lazy="true" inverse="true" cascade="none" >
    <key>
        <column name="ParentActivityId"/>
    </key>
    <one-to-many class="Activity"/>
</set>

Теперь у меня есть Entity Activity (x), у которого другая Entity Activity (y) установлена ​​как ParentActivity. Я ищу решение, что, когда я удаляю сущность y, ссылка от x до y устанавливается равной нулю. Теперь я ошибаюсь, что не могу удалить x из-за FK_Activity_ParentActivity. Может кто-нибудь указать мне правильный путь, как я могу это сделать? - Спасибо.

1 Ответ

1 голос
/ 23 ноября 2011

Может быть, эта статья Айенде Рахьен поможет вам: Различия между всеми-удалить-сиротами и сохранить-обновить

Вот что означает каждая каскадная опция:

  • нет - не делайте никаких каскадов, пусть пользователи сами их обрабатывают.
  • save-update - когда объект сохраняется / обновляется, проверяйте ассоциации и сохраняйте / обновляйте любой объект, который требует его (включая сохранить / обновить связи в сценарии «многие ко многим».
  • delete - при удалении объекта удаляются все объекты в ассоциации.
  • delete-orphan - при удалении объекта удаляются все объекты в ассоциации. В дополнение к этому, когда объект удаляется из ассоциации и не связаны с другим объектом (осиротевший), также удалите его.
  • все - при сохранении / обновлении / удалении объекта проверьте ассоциации и сохраните / обновите / удалите все найденные объекты.
  • all-delete-orphan - когда объект сохраняется / обновляется / удаляется, проверяйте связи и сохраняйте / обновляйте / удаляйте все найденные объекты. В в дополнение к этому, когда объект удаляется из ассоциации и не связан с другим объектом (осиротевшим), также удалите его.
...