EF4: ObjectContext Lifetime? - PullRequest
       21

EF4: ObjectContext Lifetime?

5 голосов
/ 24 марта 2011

Я разрабатываю настольное приложение WPF, которое использует Entity Framework 4 и SQL Compact 4. Я видел два разных стиля Repository классов:

  • Repository создает экземпляр ObjectContext, который удаляется при сборке мусора Repository. Время жизни ObjectContext совпадает со временем жизни приложения.

  • Отдельный класс DataStoreManager создает и хранит ObjectContext на весь срок службы приложения. Когда требуется репозиторий, команда получает ссылку ObjectContext из DataStoreManager и передает ее конструктору для нового репозитория. Время жизни ObjectContext - это время жизни приложения.

Является ли любой подход плохой практикой? Представляет ли одно абсолютное преимущество перед другим? Является ли любой из этих подходов лучшей практикой? Является ли либо более широко принятым или используемым разработчиками, чем другие? Спасибо за вашу помощь.

Ответы [ 2 ]

7 голосов
/ 24 марта 2011

Я бы подумал, что держать ObjectContext открытым для множественного доступа было бы плохой практикой. Как только он будет поврежден, вам придется перерабатывать его и обрабатывать.

Шаблон репозитория больше подходит для абстракции доступа к данным, но не обязательно отображается на время существования контекста.

Шаблон единицы работы больше касается инкапсуляции одного или нескольких обращений к базе данных / хранилищу, т. Е. В случае использования вы можете добавить новый блог и затем добавить первый пост по умолчанию, для этого может потребоваться вызов двух хранилищ может захотеть поделиться контекстом и инкапсулировать эти две команды в транзакции. Добавление второго сообщения может быть сделано часами позже и станет новым контекстом / единицей работы.

DJ прав в упоминании времени жизни контекста, которое вы обычно устанавливаете на уровне приложения.

7 голосов
/ 24 марта 2011

Лучшая практика зависит от того, как ваши пользователи будут использовать приложение: И как ваше приложение структурировано.

если только один пользователь одновременно использует ваше приложение, вы даже можете создать свой контекст сущности как статический экземпляр.

контекст может использоваться для запроса, для потока, для формы.

Подробнее: http://blogs.microsoft.co.il/blogs/gilf/archive/2010/02/07/entity-framework-context-lifetime-best-practices.aspx

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