LINQ to SQLでは、DataContext.GetTable<T>
を使用して動的にリポジトリを作成できます。特定のDbContext
のプロパティを宣言する以外に、Entity Framework 4でこれを行うための同様の方法はありますか?例えば:
public MyDbContext: DbContext
{
public DbSet<MySet> MySets {get; set;}
}
次のようにLINQ to SQLでできるように、MySets
への参照を動的に作成/取得する方法を知りたいです。
var mySet = MyDbContext.GetTable<MySet>();
DbContext
にはこのためのメソッドがあります:
var set = context.Set<MyEntity>();
使用する:
DbSet<MyEntity> set = context.Set<MyEntity>();
または、ジェネリックメソッドを使用できない場合:
DbSet set = context.Set(
typeof( MyEntity )
);
POCOの2回目の読み込みと複製について心配する必要はありません。セットは、コンテキストによって内部的にキャッシュされます。
これは私のアプローチです:
public static List<T> GetCollection<T>()
{
List<T> lstDynamic = null;
using (MyDbContext db = new MyDbContext())
{
DbSet mySet = db.Set(typeof(T));
mySet.Load();
var list = mySet.Local.Cast<T>();
lstDynamic = list.ToList();
}
return lstDynamic;
}
そして、あなたはこの関数を次のように呼び出します:
List<Customer> lst = StaticClass.GetCollection<Customer>();
これにより、コレクション全体が返されます。これを使用して、内容を頻繁に変更しない基本的なテーブルのキャッシュ機能を実行しました。