Я не могу сказать, что есть консенсус, но, помимо того, что я говорил со многими архитекторами по этой теме, я потратил немало времени, оценивая это. Я пришел к выводу, что вы хотите, чтобы ваше управление объектами (Хранилища) и транзакции (UnitOfWork) слабо связаны друг с другом и независимы друг от друга. Ваш репозиторий должен иметь возможность запускать без использования транзакции и наоборот. Что касается его отношения к репозиторию, то подразделение работы действительно просто обертка для транзакции. В вашем случае вы, вероятно, будете обертывать операции репозитория EF2, используя реализацию TransactionScope. В наших рамках мы включили управление транзакциями в пространство имен/проектов DataServices и наши базовые классы репозитория в пространстве имен/проектах ObjectAccess. Оттуда мы создали реализацию EF2 как для операций репозитория, так и для операций подразделения. Я не могу дать вам источник, но в основном то, что я сделал следующее:
- Используется NCommon 1,1 Beta, как моя отправная точка: NCommon
- отсоединенных Единица работы от Repository операций в NCommon
- Затем я перешел к тому, как мне нужно управлять моим ObjectContext.
Мы как раз собираемся выпустить нашу первую стабильную версию этого фреймворка. Удачи!
Первый вопрос, на который вы должны ответить: есть ли какая-либо польза от использования пользовательского репозитория и единицы работы с EF? Другие - это только детали реализации. –