Можете ли вы подтвердить, что термин «Сохранить» в терминологии NHibernate означает INSERT? - PullRequest
1 голос
/ 19 июля 2011

Я новичок в NHibbernate, и в настоящее время я пытаюсь понять атрибут «каскад» и его параметры настройки.

Если вы знакомы с Nhibernate, вы уже знаете, что один из параметров настройки для каскадного атрибута: «save-update»

И это объясняется (на www.ayende.com site) как: «когда объект сохранен / обновлен, проверьте рекомендации и сохраните / обновите любой объект, который требует его (включая сохранение / обновление ассоциации в сценарии «многие ко многим». "

Можете ли вы подтвердить в терминологии Nhibernate SAVE расшифровывается как INSERT в SQL? А знаете ли вы, есть ли какая-либо причина для использования термина SAVE вместо INSERT?

Ответы [ 2 ]

4 голосов
/ 19 июля 2011

NHibernate Save-Update применяется как к UPDATE, так и к INSERT операторам SQL.

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

  • Нет - не делайте никаких каскадов, пусть пользователи обрабатывают их самостоятельно.
  • Save-Update - когда объект сохраняется / обновляется, проверяйте ассоциации и сохраняйте / обновляйте любой объект, который требует его (включая сохранение / обновление ассоциаций в сценарии "многие ко многим").
  • Удалить - при удалении объекта удаляются все объекты в ассоциации.
  • Delete-Orphan - при удалении объекта удаляются все объекты в ассоциации. В дополнение к этому, когда объект удаляется из ассоциации и не связан с другим объектом (осиротевшим), также удаляйте его.
  • Все - при сохранении / обновлении / удалении объекта проверьте ассоциации и сохраните / обновите / удалите все найденные объекты.
  • All-Delete-Orphan - когда объект сохраняется / обновляется / удаляется, проверяйте ассоциации и сохраняйте / обновляйте / удаляйте все найденные объекты. В дополнение к этому, когда объект удаляется из ассоциации и не связан с другим объектом (осиротевшим), также удаляйте его.

Итак, Save-Update в основном говорит NHibernate: «При сохранении моей сущности, если какие-либо объекты, связанные с этой сущностью, являются временными (еще не сохранены), сохраните их (сохраните)». Все связанные объекты, которые уже являются постоянными, будут обновлены.

Причина, по которой он называется Save-Update, может заключаться в том, что он применяется к Save(), Update() и SaveOrUpdate()

В документации Фабио Мауло по NHibernate , Глава 9.9 рассказывает о графах LifeStyles и Object * :

NHibernate не полностью реализует «постоянство по достижимости», что подразумевает (неэффективный) постоянный сбор мусора. Тем не менее, из-за широкого спроса, NHibernate поддерживает понятие объекты становятся постоянными, когда на них ссылается другой постоянный объект. Ассоциации, помеченные как cascade = "save-update", ведут себя таким образом. Если вы хотите использовать этот подход во всем приложении, это проще указать атрибут default-cascade для элемент.

2 голосов
/ 19 июля 2011

Сохранение не эквивалентно вставке, хотя в большинстве приложений вызов Сохранения приводит к одной или нескольким вставкам.

Сохранение делает временный объект постоянным.Обновление делает отдельный объект постоянным. Понимание этих концепций - ключ к эффективному использованию NHibernate.

cascade="save-update" означает, что ссылочные объекты, которые еще не являются постоянными, также будут сохранены при сохранении или обновлении этого объекта.

Без этого атрибута NHibernate сообщит вам, что указанная сущность является временной при попытке сброса (если вы не сохраните ее вручную)

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