You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

EntityFrameworkCore反射读取数据:如何创建未知类型的DbSet

.NET 6 EF Core 动态操作DbContext表的问题

问题1:从IEntityType获取数据列表

我正在开发一个.NET 6控制台应用,使用Microsoft.EntityFrameworkCore从自定义DbContext的表中读取数据。已在OnModelCreating()中将实体添加到模型中,可通过以下代码获取实体:

var entity = ctx.Model.GetEntityTypes().FirstOrDefault(e => e.FullName().IndexOf(tableName) >= 0);

但这段代码返回的是IEntityType类型,请问如何获取对应的数据列表(类似entity.ToList()的效果)?

问题2:反射创建DbSet并转换类型

我更倾向于另一种实现方式:通过反射创建了继承自BaseTable的表类型数组并存储为列表,希望使用DbContext.Set()创建DbSet<>,以便使用Find()、AsNoTracking()等方法(包括写入操作)。已编写以下代码:

IQueryable<Object> dbSet = (IQueryable<Object>)ctx
                                                .GetType()
                                                .GetMethod("Set", 1, Type.EmptyTypes)
                                                .MakeGenericMethod(t)   
                                                .Invoke(ctx, null);

这段代码可以实现dbSet.ToList(),但我希望将其转换为DbSet类型,请问是否可行?

补充与更新需求

  • 补充说明:仅从多个表中读取少量数据,然后写入到另一个具有相同表结构的数据库中。
  • 更新需求:遍历多个表,需在运行时根据列名提取主键及另外两列,若第一列值包含特定内容,则更新第二列的值。

内容的提问来源于stack exchange,提问作者AndyW

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 15:00:59