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 https://stackoverflow.com/questions/44142775/dynamically-instantiate-model-object-in-entity-framework-db-first-by-passing-typ/44143131#44143131我可以在哪里DbSet
动态地。如何在 Entity Framework Core 中实现此功能?
我收到错误
DbSet dbSet = dbContext.Set(myDictionary[tableName]);
似乎Set
新版本改变了方法。
感谢帮助。
如果你想获得DbSet<TEntity>
by TEntity
, use:
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 );
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)