Как задавать правила каскадирования в NHibernate? - CodeHelper

Как задавать правила каскадирования в NHibernate?

1

Есть два класса, один имеет ссылку на коллекцию экземпляров другого (IList). Этот граф сохраняется в базе с помощью HNibernate. Как задать правила, определяющие, что должно происходить с дочерними объектами, при операциях с родительскими (добавление, удаление, обновление/create, delete, update)?

Лучший ответ:

1

Правила каскадирования задаются атрибутом cascade в конфигуровочном файле. Возможные варианты cascade:

none — не использовать никаких автоматических правил, в этом случае ответственность за целостность данных лежит на пользователе и движке БД.

save-update — когда объект сохраняется или обновляется, проверяются и создаются/обновляются все зависимые объекты (если это необходимо).

delete — при удалении объекта удаляются все ассоциированные с ним объекты.

delete-orphans - при удалении объекта удаляются все ассоциированные с ним объекты. В дополнение к этому, когда дочерний объект A удаляется из списка ассоциированных объектов родителя B (B.ListOfA.Remove(A)) и не назначается другому родителю (так называемый orphaned объект), то A также удаляется вместе с B.

all — когда объект сохраняется, обновляется или удаляется, проверяются и создаются/обновляются/добавляются все зависимые объекты (если это необходимо). Аналогично совместному применению правил delete и save-update.

all-delete-orphans - когда объект сохраняется, обновляется или удаляется, проверяются и создаются/обновляются/добавляются все зависимые объекты (аналогично all). В дополнение к этому, когда дочерний объект A удаляется из списка ассоциированных объектов родителя B (B.ListOfA.Remove(A)) и не назначается другому родителю, то A также удаляется вместе с B.

Внимание! В разных версиях NHibernate может использоваться разное написание слова orphans (orphans или orphan). Если получаете исключение типа

Unsupported cascade style: delete-orphans

то это ваш случай.

v1.7.123.556
© 2009—2010 CodeHelper FAQ | О сайте | Обратная связь | История изменений | Статьи
Creative Commons LicenseМатериалы сайта распространяются под лицензией Creative Commons Attribution-Share Alike 3.0 Unported.