Избавьтесь от неявности UoW - PullRequest
0 голосов
/ 09 июля 2011

Сеанс NHibernate и ObjectContext EF являются реализациями шаблона Unit of Work и предлагают аналогичные подходы для отслеживания изменений: вы извлекаете некоторые объекты, затем изменяете их каким-либо образом и после этого вызываете SaveChanges / SubmitChanges / Save / и т.д.

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

1 Ответ

1 голос
/ 10 июля 2011

(примечание: к счастью, я никогда не имел дело с EF; мой ответ касается только NH)
Я думаю, что ваше первоначальное предположение неверно:

изменение объекта автоматически означает, что он будет сохранен

это не правда; чтобы сохранить изменения, которые вы внесли, вам необходимо:

  1. вызовите Session.Flush () самостоятельно
  2. установить режим сброса сессии на AutoCommit (настоятельно не рекомендуется)
  3. использовать транзакцию IT и зафиксировать ее (безусловно, лучший подход).

Если вы не сделаете ничего из вышеперечисленного, ваши изменения не будут сохранены.
Лично я чувствую, что NH дает мне полный контроль над тем, что входит в мою базу данных.

здесь ' хорошая статья.

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