Hibernate Каскад удалить на сумке - PullRequest
3 голосов
/ 28 апреля 2010

Собрав большую часть моего DAL с помощью NHibernate, я обнаружил, что правила каскадирования при удалении SQL Server также необходимо учитывать в моих файлах HBM. Я использовал сумки для всех своих коллекций, но, кажется, нет способа добавить атрибут cascade = "delete" в сумку. Я могу поменять все свои сумки на наборы, но это означает, что я изменил все свои IList <> на своих моделях на PersistentGenericSet <>, что мне не очень нравится.

Любой совет?

Anthony

Ответы [ 2 ]

5 голосов
/ 28 апреля 2010

Существует два отдельных, но связанных понятия: каскадные правила NHibernate и каскадирование БД.

Последний фактически настроен на элементе key, поэтому, если FK имеет ON DELETE CASCADE, сумка должна выглядеть так:

<bag name="Children" ...>
  <key column="ParentId" on-delete="cascade"/>
  <one-to-many class="Child"/>
</bag>
3 голосов
/ 28 апреля 2010

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

Каскады базы данных похожи, но не предоставляют возможности автоматического удаления осиротевшей дочерней записи. Установка параметра каскада в NHibernate и в базе данных несколько избыточна, но может быть полезна, если другие системы обращаются к базе данных напрямую.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...