Дразнящий DbContext.Set <T>()? - PullRequest
       26

Дразнящий DbContext.Set <T>()?

10 голосов
/ 15 февраля 2011

Сначала мы используем EF Code, и у нас есть контекст данных для нашей базы данных продаж.Кроме того, у нас есть класс, который находится поверх нашего контекста данных и выполняет некоторые основные операции CRUD.

Например, у нас есть следующая функция:

public static T Create<T>(int userId, T entity) where T : class, IAllowCreate
{
    if (entity == null)
        throw new ArgumentNullException("entity");

    using (SalesContext dc = new SalesContext())
    {
         dc.Set<T>().Add(entity);
         dc.SaveChanges();

         return entity;
    }
}

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

Мы довольно свободно используем dc.Set () (как показано выше) в нашем коде, так как мы пытаемся создать универсальные методы CRUD.Вместо того, чтобы иметь ReadCustomer, ReadContact и т. Д., Мы просто сделали бы Read ().Однако dc.Set возвращает DbSet, а не IDbSet, поэтому я не могу это сделать.

Кто-нибудь смог смоделировать или подделать DbContext и по-прежнему использовать функцию Set?

1 Ответ

11 голосов
/ 15 февраля 2011
interface ISalesContext
{
    IDbSet<T> GetIDbSet<T>();
}

class SalesContext : DbContext, ISalesContext
{
    public IDbSet<T> GetIDbSet<T>()
    {
        return Set<T>();
    }
}

Я использовал другое имя, но вы можете использовать оператор new, если предпочитаете скрывать обычную реализацию.

...