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