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
相关产品推荐
相关产品推荐

