Я придумал 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);
}