创建 DbSet在实体框架中动态?

发布于 2024-10-23 00:30:46 字数 413 浏览 2 评论 0原文

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

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

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

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

In LINQ to SQL, I can create a repository dynamically using DataContext.GetTable<T>. Is there a similar way to do this in Entity Framework 4 other than declaring the properties on the specific DbContext? For example:

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

I would like to know how can I create/get a reference to MySets dynamically as I can with LINQ to SQL as in:

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

南渊 2024-10-30 00:30:46

DbContext 有这样的方法:

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

DbContext has method for this:

  var set = context.Set<MyEntity>();
柠北森屋 2024-10-30 00:30:46

使用:

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

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

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

不要担心二次加载和复制 POCO。集合由上下文在内部缓存。

Use:

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

Or, if you can't use the generic method:

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

Don't worry about second-loading and duplicating a POCO. Sets are cached internally by the Context.

池木 2024-10-30 00:30:46

这是我的方法:

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

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

This is my aproach:

    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;
     }

And you call this function as:

List<Customer> lst = StaticClass.GetCollection<Customer>();

This returns your entire collection. I used this to perform a cache functionality for basic tables which don't change its content very often.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文