实体框架核心中的动态DbSet

时间:2018-10-04 01:56:26

标签: c# entity-framework-core dbset

string tableName = "TblStudents";
Dictionary<string, Type> myDictionary = new Dictionary<string, Type>()
{
    { "TblStudents", typeof(TblStudent) },
    { "TblTeachers", typeof(TblTeacher) }
};

// Context always same
DBContext dbContext = new DBContext();
DbSet dbSet = dbContext.Set(myDictionary[tableName]);

以上代码来自此post,在这里我可以动态DbSet。如何在Entity Framework Core中进行这项工作?

我在

遇到错误
DbSet dbSet = dbContext.Set(myDictionary[tableName]);

好像Set方法在新版本中已更改。

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

如果您尝试通过DbSet<TEntity>获得TEntity,请使用:

var dbSet = dbContext.Set<TEntity>();

如果要基于字符串名称和字典来调用该方法,则必须使用反射。

EF Core似乎没有非通用的DbSet,因此您必须使用非通用接口之一,例如IQueryable,而我要添加一个{{1} },您可以调用它来获取Func而不是类型,如果您坚持走字典映射路线。例如:

IQueryable