在Entity Framework中动态创建DbSet <t>?</t>

时间:2011-03-15 06:43:49

标签: c# linq-to-sql entity-framework-4 ef-code-first dbset

在LINQ to SQL中,我可以使用DataContext.GetTable<T>动态创建存储库。除了在特定DbContext上声明属性之外,是否有类似的方法在Entity Framework 4中执行此操作?例如:

public MyDbContext: DbContext
{
    public DbSet<MySet> MySets {get; set;}
}

我想知道如何动态创建/获取对MySets的引用,就像我在LINQ to SQL中一样:

var mySet = MyDbContext.GetTable<MySet>();

3 个答案:

答案 0 :(得分:38)

DbContext有这样的方法:

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

答案 1 :(得分:17)

使用:

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

或者,如果您不能使用通用方法:

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

不要担心第二次加载和复制POCO。集合由Context内部缓存。

答案 2 :(得分: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>();

这将返回您的整个收藏集。我用它来为基本表执行缓存功能,这些表不会经常更改其内容。