Единица работы используется для сохранения в нескольких хранилищах как часть одной транзакции.
Например, если вы работаете с UserRepository и FooRepository , если первый проходит, второй отказывает, тогда транзакции не синхронизированы.
Единица работы реализована как оболочка для ObjectContext, то есть вы выполняете свою работу в обоих репозиториях, затем Commit в UoW Once , который обрабатывает изменения в обоих репозиториях. В случае сбоя одной или обеих операций вся транзакция завершается неудачей.
Это зависит от того, как вы работаете с вашим ObjectContext. Если вы непосредственно используете контекст объекта, то вы можете заключить все свои операции в , используя оператор . Но большинство людей получают доступ к контексту через репозиторий (и избавляются от контекста с помощью контейнера DI или вручную). В этом случае требуется единица работы для работы с несколькими хранилищами.
Вот пример EF4 / Repository / UoW.
Сторонники DDD утверждают, что единица работы не требуется для репозиториев, когда совокупные границы правильны.