NHibernate - хорошо ли он работает с каскадными удалениями на уровне базы данных при ограничениях внешнего ключа - PullRequest
5 голосов
/ 12 мая 2010

Доза nHibernate хорошо играть с каскадными удалениями уровня базы данных? Я имею в виду, что если на уровне RDBMS установлено ограничение для каскадного удаления всех сирот, будет ли nHibernate вызывать любую пользовательскую логику удаления на уровне приложения, если я буду удалять сущность через nHibernate? Или я должен удалить каскадные удаления из уровня RDBMS и просто использовать функцию каскадного удаления самого nHibernate, определив это поведение через его конфигурацию?

Спасибо

Ответы [ 3 ]

5 голосов
/ 12 мая 2010

NHibernate просто рассматривает вашу RDBMS как хранилище данных. В большинстве случаев это означает, что вы можете позволить NHibernate сделать всю работу за вас.

Пусть NHibernate сделает каскадное удаление. Таким образом, вы можете сохранить свою логику и контроль над тем, где она находится (в вашем приложении), а не в базе данных, где ваше приложение имеет небольшой контроль или гибкость.

EDIT:

ON DELETE CASCADE не всегда показывает отличную производительность с NHibernate. Вы должны быть очень осторожны с настройками каскада ваших ассоциаций коллекций. Смотрите эту статью: http://eddii.wordpress.com/2006/11/16/hibernate-on-deletecascade-performance/

Если производительность не является большой проблемой для вас, то, как правило, NHibernate делает свою работу более чистой и менее проблемной. Джейми Иде правильно указывает:

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

2 голосов
/ 12 мая 2010

Может работать с каскадами на уровне базы данных. Вы можете объявить их в отображении, поэтому инструмент hbm2ddl сгенерирует on delete cascade. Опция находится в свойстве key коллекции.

<bag ...>
    <key column="someId" on-delete="cascade" />
...
</bag>
1 голос
/ 13 мая 2010

Это зависит от того, что вы подразумеваете под «хорошо играть». Вы можете использовать каскадное удаление с NHibernate, но вы должны быть осторожны при обновлении объектов, которые могут пострадать от каскадного удаления. Как и в случае с триггерами, NHibernate не будет знать, что представление объекта в базе данных изменилось из-за операции базы данных. Я бы не использовал их по этой причине в большинстве случаев.

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