私は DTO から分離されたモデルで EF を使用しています。多くのクラス ( GetByPrimarykey
、GetBy
、GetAll
など) に同じ関数を実装する必要があるため、抽象クラスがあればいいと思いました。
protected List<T> GetBy(Func<T, bool> func)
{
return WorkingSet.Where(func).ToList();
}
protected T GetFirstBy(Func<T, bool> func)
{
return WorkingSet.FirstOrDefault(func);
}
public virtual T GetByPrimaryKey(K key)
{
return WorkingSet.FirstOrDefault(GetByKeyPredict(key));
}
次に、実装クラスで予測関数を単純に実装します。
protected override Func<MyType, bool> GetByKeyPredict(int key)
{
return (c=> c.MyTypeId==key);
}
問題は、SQL Server Profiler を実行すると、select に原因がないことがわかります。関数をオーバーライドするとGetByPrimaryKey
:
public override MyTypeGetByPrimaryKey(int key)
{
return WorkingSet.FirstOrDefault(s => s.MyTypeId== key);
}
GetBy
クエリは問題ありませんが、関数が非常に役立つことが証明されているため、予測が機能することが本当に必要です。