Я использую более или менее последний метод, но я не уверен, что вы задаете правильный вопрос, точно. Реальный вопрос, я думаю, это «что такое единица работы?» Нам нужно рассмотреть некоторые основные факты:
- Использование нескольких ObjectContexts для одной и той же операции значительно сложнее, чем использование одного ObjectContext в одной операции.
- Хранение ObjectContext в течение длительного времени может потенциально занять много памяти и иметь другие нежелательные побочные эффекты.
- ObjectContext сам по себе имеет некоторые функции «облегченной транзакции», а именно то, что он накапливает изменения и может применить их все сразу, и что вы в какой-то степени изолированы от изменений в других контекстах.
Поэтому , я стараюсь использовать один ObjectContext на единицу работы и распоряжаться контекстом, когда единица работы завершена. Поскольку единица работы может потенциально включать несколько репозиториев, я создаю экземпляр класса Service, который создает ObjectContext, также может возвращать репозитории. Когда я спрашиваю службу о хранилище, она вставляет ObjectContext перед возвратом нового экземпляра. Утилизация службы удаляет контекст и все репозитории одновременно.
Я использую один экземпляр службы на единицу работы. В моем случае я делаю ASP.NET MVC, поэтому единица работы - это ответ на один запрос.