web-dev-qa-db-ja.com

Entity Frameworkで動的にDbSet <T>を作成しますか?

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>();
23
skjagini

DbContextにはこのためのメソッドがあります:

  var set = context.Set<MyEntity>();
38
Ladislav Mrnka

使用する:

DbSet<MyEntity> set = context.Set<MyEntity>();

または、ジェネリックメソッドを使用できない場合:

DbSet set = context.Set(
    typeof( MyEntity )
);

POCOの2回目の読み込みと複製について心配する必要はありません。セットは、コンテキストによって内部的にキャッシュされます。

18
Jan 'splite' K.

これは私のアプローチです:

    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>();

これにより、コレクション全体が返されます。これを使用して、内容を頻繁に変更しない基本的なテーブルのキャッシュ機能を実行しました。

0
jaimenino