Entity Framework Core 中的动态 DbSet

bbu*_*ver 6 c# dbset entity-framework-core

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]);
Run Code Online (Sandbox Code Playgroud)

上面的代码来自这篇文章,我可以DbSet动态地。我怎样才能在 Entity Framework Core 中做到这一点?

我在

DbSet dbSet = dbContext.Set(myDictionary[tableName]);
Run Code Online (Sandbox Code Playgroud)

Set新版本中似乎方法已更改。

帮助表示赞赏。

Moh*_*oho 7

如果您想获得 by DbSet<TEntity>TEntity请使用:

var dbSet = dbContext.Set<TEntity>();
Run Code Online (Sandbox Code Playgroud)

如果您想根据字符串名称和字典调用该方法,则必须使用反射。

EF Core 似乎没有非通用接口DbSet,因此您必须使用非通用接口之一,例如,如果您坚持使用IQueryable,我将包含一个Func可以调用它来获取IQueryable而不是仅获取类型的接口字典映射路径。例如:

var myDictionary = new Dictionary<string, Func<DbContext, IQueryable>>()
{
    { "TblStudents", ( DbContext context ) => context.Set<TblStudent>() }
};

var dbSet = myDictionary[ "TblStudents" ].Invoke( dbContext );
Run Code Online (Sandbox Code Playgroud)