Как совместить каскадные обновления/удаления между SQL Server и NHibernate?

Я пишу приложение с созданной вручную моделью предметной области (классы) и созданной вручную моделью данных (таблицы/отношения) и позволяю NHibernate позаботиться об отображении.

Лучше указать базе данных выполнять каскадные обновления или удаления или указать NHibernate сделать это (cascade="all-delete-orphan")? Можно ли настроить их обоих одновременно?


person yfeldblum    schedule 03.10.2008    source источник


Ответы (2)


Я предпочитаю, чтобы NHibernate сделал это за меня. Его проще настроить, и он хорошо работает.

cascade: all-delete-orphan — это то, что вы не сможете сделать в SQL без триггера, так что есть еще одна причина

person Ben Scheirman    schedule 03.10.2008

Можно ли настроить их обоих одновременно?

Я думаю, что если вы попытаетесь, вы можете получить жалобу NHibernate, так как большинство его операций проверяют количество строк, чтобы убедиться, что ожидаемое количество строк было вставлено/обновлено/удалено.

Как говорит Бен, заставьте NHibernate сделать это.

В конечном счете, NHibernate (и ORM в целом) позволяет вам думать о базе данных как о механизме хранения и поиска. Вы по-прежнему хотите создавать ограничения, первичные ключи, внешние ключи и индексы, но ORM в любом случае должна подчиняться этим правилам. Как и в любом сценарии доступа к данным, если вы обнаружите, что создаете сложные ограничения в базе данных, помните, что эти правила должны быть продублированы в вашем приложении.

person kͩeͣmͮpͥ ͩ    schedule 18.10.2008