在DbContext Entity Framework Core 2.1中获取实体模型列表

10
我正在寻找一种方法来获取DbContext中所有实体模型的列表。例如,如果我在C#中定义了两个名为Customer和Invoice的模型,并通过Code-First创建了EF实体和数据库,那么现在如何查询DbContext以获取包含Customer和Invoice的列表--即该上下文中的所有实体?我想调用一个返回所有实体列表的方法--不是数据,只是实体的列表。
对我来说,这似乎应该很容易,但要么不容易,要么我错过了什么--可能是后者。;-)。
请问有人能指点我正确的方向吗?谢谢!

“按 '所有实体的列表 - 而不是数据',您的意思是什么?”它们的ID列表?如果不是数据,那么列表包含什么? - xr280xr
2个回答

28

您可以使用 Model 属性获取关联的 IModel,然后使用 GetEntityTypes 方法枚举所有 IEntityTypeIEntityTypeClrType 属性将给出相关联的类类型,例如:

DbContext db = ...;
var entityTypes = db.Model.GetEntityTypes().Select(t => t.ClrType).ToList();

IEntityType拥有许多有用的属性和(扩展)方法,可用于获取主键/备用键、外键、导航、属性等信息,以便在需要时使用。


1
谢谢!这正是我所需要的!我感激你的帮助。 - Kevin
@TanvirArjel 你不能这样做。你到底要反映什么?DbSet<>类型的属性吗?这些根本不是必需的。请参见在模型中包含类型。这就是为什么我们需要一个IModel实例作为起点。 - Ivan Stoev
@TanvirArjel,您所询问的基本上是如何在不实际执行代码的情况下获取OnModelCreating内部正在执行的内容,这显然是不可能的。 - Ivan Stoev
@IvanStoev 实际上我需要将一个DbContext中的所有模型添加到另一个DbContext中,以便我可以同时从两个DbContext查询、更新同一个数据库。你能告诉我最简单的方法是什么吗?注意:第一个DbContext的引用在第二个DbContext程序集中不可用。因此,我必须使用反射来完成它。 - TanvirArjel
让我们在聊天中继续这个讨论 - TanvirArjel
显示剩余8条评论

0

您可以参考以下文档:https://learn.microsoft.com/en-us/ef/core/querying/related-data

例如,如果您有两个表格,分别是博客和帖子,则可以按照下面的示例获取相关联的表格。这取决于这两个表格中关系的存在方式。

您还可以添加where子句以仅获取所选记录。

using (var context = new BloggingContext())
{
    var blogs = context.Blogs
        .Include(blog => blog.Posts)
        .ToList();
}

谢谢您的回复,但我需要的只是上下文中所有实体模型的列表。例如,我想要能够键入myContext.GetEntityModels()并返回该上下文中所有模型的列表 - 而不是数据或它们之间的任何关系。 - Kevin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接