C # - EF Repository - PullRequest
       2

C # - EF Repository

0 голосов
/ 26 марта 2011

Я придумал 2 возможных способа взаимодействия моей EF-реализации с моим приложением. Первый - это простой репозиторий, а второй - довольно динамичная версия. Оба эти решения производят одинаковые SQL-запросы в соответствии с SQL-профилировщиком - так что ни больше, ни меньше

Теперь мой вопрос, есть ли издержки производительности для решения 1 по сравнению с решением 2? - и если да, имеет ли это значение в долгосрочной перспективе?

Решение 1:

public class Repository
{
    public MyContext Ctx = new MyContext();

    public IEnumerable<T> GetAll<T>() where T : class
    {
        return Ctx.Set<T>();
    }
}

... И код, который его вызывает:

var rep = new Repository();

Console.WriteLine("DEALERS:");
foreach(var dealer in rep.GetAll<Dealer>())
{
    Console.WriteLine(dealer.Name);
}

Console.WriteLine("CARS:");
foreach (var car in rep.GetAll<Car>())
{
    Console.WriteLine(car.CarName);
}

Решение 2:

public class Repository<T> where T : class
{
    private readonly MyContext _ctx = new MyContext();
    private readonly IDbSet<T> _dbset;

    public Repository()
    {
        _dbset = _ctx.Set<T>();
    }

    public IEnumerable<T> GetAll()
    {
        return _dbset;
    }
}

... И код, который его вызывает:

var dealerRep = new Repository<Dealer>();
var carRep = new Repository<Car>();

Console.WriteLine("DEALERS:");
foreach(var dealer in dealerRep.GetAll())
{
    Console.WriteLine(dealer.Name);
}

Console.WriteLine("CARS:");
foreach (var car in carRep.GetAll())
{
    Console.WriteLine(car.CarName);
}

Ответы [ 2 ]

1 голос
/ 26 марта 2011

EF - это ORM, и он уже реализует шаблон репозитория, абсолютно не нужно оборачивать его в свой собственный репозиторий.

0 голосов
/ 26 марта 2011

Вам необходимо получить доступ к одному и тому же набору как минимум дважды в каждом хранилище, чтобы увидеть, действительно ли два решения действуют одинаково.

Проверьте профилировщик при втором вызове и, возможно, внесите изменения в данные через другой контекст, между доступами, чтобы убедиться, что поведение такое же.

...