Нельзя создать статическую единицу работы, потому что по определению единица работы - это недолговечный объект. Поскольку EF ObjectContext
спроектирован на основе шаблона единицы работы, плохая идея иметь один экземпляр ObjectContext
в течение срока службы приложения. На это есть несколько причин.
Прежде всего, класс ObjectContext
не является поточно-ориентированным. Это означает, что во время единицы работы одного пользователя (например, в веб-приложении) другой пользователь может зафиксировать свою единицу работы. Когда они совместно используют один и тот же ObjectContext
, это означает, что в этой ситуации сохраняется только половина изменений, а изменения не являются транзакционными. Когда вам везет, ObjectContext
терпит неудачу и выдает исключение. Когда вам не везет, вы повреждаете ObjectContext
и в безопасности, загружаете дерьмо из вашей базы данных и в нее и узнаете, когда ваше приложение работает в рабочем состоянии (конечно, во время тестирования и постановки все всегда работает).
Во-вторых, ObjectContext
имеет механизм кэширования, который предназначен для его кратковременного использования. Когда сущность извлекается из базы данных, она остается в кэше ObjectContext
до тех пор, пока этот экземпляр не будет собран мусором. Когда вы сохраняете этот экземпляр в течение длительного периода времени, сущности устаревают. Особенно, если этот конкретный экземпляр ObjectContext
не единственный, пишущий в эту базу данных.