私はタイプ別に登録することができるヘルパーをまとめました。私は登録複数を動的に追加する
Dictionary<Type, LambdaExpression[]> includes =
new Dictionary<Type, LambdaExpression[]>();
は次のように含まれています:このようになります
public void Add<T>(params Expression<Func<T, object>>[] includes)
{
this.includes.Add(typeof(T), includes);
}
Add<Customer>(e =>
e.Address.City.Province.Country,
e.Products.Select(p => p.Category));
お知らせ2はCustomer
のために含まれてあります。私は、取得するこの方法は、タイプによって含まれてい:
DbSet<T> entitySet = null;
void LoadIncludes()
{
var includes = Includes.Instance.Get<T>().DirectCast<Expression<Func<T, object>>[]>();
if (includes != null)
{
foreach (var include in includes)
{
entitySet.Include(include).Load();
}
}
}
、私はこれを行う:
public T GetById(int id)
{
LoadIncludes();
return entitySet.SingleOrDefault(x => x.Id == id);
}
それはうまく動作しますが、それはとても遅いだし、それが原因で.Load()
方法です私はLoadIncludes()
に電話しています。私がここでやりたいことをより速く行う方法はありますか?
を私は 'を呼び出すために、実行時に型固有のデリゲートをコンパイル/作成する表現を使用することができますね。コレクションのインクルードごとに連続してインクルード()します。私はそれを行い、誰もより良い解決策を持っていなければコードを投稿します。 – oscilatingcretin
'entitySet'とは何ですか? –
@IvanStoevおっと...それは 'DbSet'です。更新されます –
oscilatingcretin