私は、EF実装が自分のアプリケーションとどのように対話するかについて2つの方法を考えました。最初のものは単純なリポジトリであり、2番目のものはかなり動的なものです。これらのソリューションはどちらも、SQLプロファイラに基づいて同じSQLクエリを生成します。C# - EF Repository
今、私の質問ですが、解決策2と比較して解決策1のオーバーヘッドがありますか? - そうなら、長期的には重要なのでしょうか?
解決方法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);
}
OT:テーブルに何千(または何万)もの行がある場合、フィルタ/修飾子を使用しないで慎重に使用してください。 – RobS