c# - Entity Framework Core 中的动态 DbSet

标签 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新版本更改了方法。

帮助表示赞赏。

最佳答案

如果您想获得 DbSet<TEntity>通过 TEntity , 采用:

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

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

EF Core 似乎没有非泛型 DbSet所以你必须使用非通用接口(interface)之一,例如 IQueryable我会包括一个Func您可以调用它来获取 IQueryable如果您坚持使用字典映射路线,而不仅仅是类型。例如:
var myDictionary = new Dictionary<string, Func<DbContext, IQueryable>>()
{
    { "TblStudents", ( DbContext context ) => context.Set<TblStudent>() }
};

var dbSet = myDictionary[ "TblStudents" ].Invoke( dbContext );

关于c# - Entity Framework Core 中的动态 DbSet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52637924/

相关文章:

c# - 获取 wcf 服务程序集中文件的路径

c# - 请将 SQL 转换为 LINQ 或改进我的查询

c# - Visual Studio 中的 "Treat all warnings as errors except..."

c# - EFCore 中的 Npgsql 无法翻译 DateTimeOffset.Date

c# - EFCore 2.2.6 与 5.0.8 无跟踪

unit-testing - FakeItEasy DbSet/IQueryable<T> - Entity Framework 6

c# - 哈希集中的重复元素

c# - EF Core Composite Key,一个外键,一个自增

entity-framework - C# | Entity Framework |无法从固定大小类型的数组中删除项目

entity-framework - 仅使用 DbSet 更新对象