Почему я не должен инкапсулировать некоторую настройку структуры сущностей в небольшой абстрактный базовый класс? - PullRequest
1 голос
/ 15 марта 2012

Я работаю с 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. Я не уверен, что это лучше, чем база данных в памяти с интеграционными тестами (не то, чтобы я все еще не мог сделать это с абстрактным базовым классом, подобным этому - но я не заинтересован в этом для этого поста) *

1 Ответ

0 голосов
/ 15 марта 2012

В настоящее время ваша обертка не кажется очень полезной, потому что она действительно мало что делает (если вы не опустите код).Я имею в виду, что в этом нет ничего плохого, но я не вижу смысла, если все, что он делает, это сохранить.Я думаю, что то, что вы ищете здесь, называется шаблоном репозиторий , который является хорошей вещью для наложения поверх EF4 в большинстве случаев.Если вы заглянете в Google для «структуры сущностей шаблона репозитория», вы найдете немало примеров того, как реализовать шаблон, включая полноценные примеры с общей типизацией (для работы с конкретными типами сущностей EF) и еще много чего. Это хорошее, простое начало.

...