Я работаю с Entity Framework 4.0 и структурировал абстрактный базовый класс, подобный этому
public abstract class RepositoryBase : IDisposable
{
protected MyContext context;
protected RepositoryBase ()
{
context = new MyContext();
context.ContextOptions.LazyLoadingEnabled = true;
context.CommandTimeout = int.MaxValue;
}
public virtual int Save()
{
return context.SaveChanges();
}
public void Dispose()
{
context.Dispose();
}
~RepositoryBase()
{
Dispose();
}
}
Но я все больше нервничаю, потому что я никогда не видел, чтобы кто-нибудь делал это. Я делаю это в веб-приложении и создаю / утилизирую свои объекты при каждом запросе (без проблем с отсутствием потоковых / статических переменных)
Я все еще создаю новый ObjectContext ОЧЕНЬ часто, но избегаю необходимости присоединять / отсоединять сущности, если у меня есть класс, инкапсулирующий состояние нескольких сущностей.
Мой вопрос: почему бы просто не позволить ObjectContext жить в течение времени жизни классов, которые порождают такой класс?
Ни один из этих объектов не вводится в сеанс или что-то в этом роде, так что же здесь за анти-паттерн?
Кроме того, я изучал возможность издеваться над моим ObjectContext. Я не уверен, что это лучше, чем база данных в памяти с интеграционными тестами (не то, чтобы я все еще не мог сделать это с абстрактным базовым классом, подобным этому - но я не заинтересован в этом для этого поста) *