Управление временем жизни
Вы правы, что один статический экземпляр DbContext
равен , обычно не рекомендуется:
Чем больше вы используете ObjectContextКак правило, чем больше это становится.Это потому, что он содержит ссылку на все сущности, о которых он когда-либо знал, по существу, на то, что вы запрашивали, добавляли или прикрепляли.Поэтому вам следует пересмотреть возможность совместного использования одного и того же ObjectContext на неопределенный срок.
Эти комментарии применяются непосредственно к DbContext
, поскольку он переносит оболочки ObjectContext
для предоставления "упрощенных и более интуитивных API."1015 * [ см. Документацию ]
Стоимость строительства
Затраты на создание контекста относительно низкие:
на самом деле эти затраты довольно низки, потому что в основном это просто копирование метаданных из глобального кэша посредством ссылки в новый ObjectContext.Как правило, я не думаю, что об этой стоимости стоит беспокоиться о ...
Обычный способ работы с недолговечным контекстом - заключить его в блок использования:
using(DbContext context = new SomeDbContext())
{
// Do work with context
}
Чтобы упростить тестирование, вы можете захотеть, чтобы ваш DbContext
реализовал некоторый интерфейс IDbContext
и создал фабричный класс ContextFactory<T> where T : IDbContext
для создания экземпляров контекстов.
Это позволяет вам легко вставить любой код IDbContext
в ваш код (т. Е. Контекст в памяти для насмешки над объектом .)
Ресурсы