Entity Framework 核心中的动态 DbSet
Dynamic DbSet in 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]);
以上代码来自这个,我可以动态地DbSet
。我怎样才能在 Entity Framework Core 中完成这项工作?
我在
处遇到错误
DbSet dbSet = dbContext.Set(myDictionary[tableName]);
似乎 Set
方法在新版本中已更改。
感谢帮助。
如果您尝试通过 TEntity
获得 DbSet<TEntity>
,请使用:
var dbSet = dbContext.Set<TEntity>();
如果您想根据字符串名称和字典调用该方法,则必须使用反射。
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 );
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]);
以上代码来自这个DbSet
。我怎样才能在 Entity Framework Core 中完成这项工作?
我在
处遇到错误DbSet dbSet = dbContext.Set(myDictionary[tableName]);
似乎 Set
方法在新版本中已更改。
感谢帮助。
如果您尝试通过 TEntity
获得 DbSet<TEntity>
,请使用:
var dbSet = dbContext.Set<TEntity>();
如果您想根据字符串名称和字典调用该方法,则必须使用反射。
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 );