如何从EF Core / .NET Core 2.0中的实体名称获取DbSet

我有一个DbContext与几个DbSet属性:

 public virtual DbSet A { get; set; } public virtual DbSet B { get; set; } public virtual DbSet C { get; set; } ... 

在某些情况下,我现在必须能够以实体名称作为字符串检索特定的DbSet(例如,当用户输入“A”时,我需要获取Dbset )。

在以前的EF版本中,可能存在以下情况:

var dbset = Context.Set(Type.GetType(A));

使用当前版本的EF核心有类似的方法吗? 我已经尝试了几种方法来实现这一点,但我现在使用它的唯一方法是使用一个相当丑陋的开关/案例,我想摆脱它。

我在这里发现了几个类似问题的post,但它们都与早期的.NET Core版本或EF5 / EF6有关。

这样做是为de dbcontext类添加de extension Set(Type t)方法。

 using Microsoft.EntityFrameworkCore; namespace ApiWebApplication.Utils { public static class MyExtensions { public static IQueryable Set (this DbContext _context, Type t) { return (IQueryable)_context.GetType().GetMethod("Set").MakeGenericMethod(t).Invoke(_context, null); } } } 

例:

  // GET: api/Employees [HttpGet] public IEnumerable GetEmployees() { return _context.Set(typeof(Employee)); }