假设我有一个带有以下DbSet的DbContext
class Amimals : DbContext
{
public DbSet<Dog> Dogs { get; set; }
public DbSet<Cat> Cats { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
在每个EntityTypeConfiguration内部,我为每个DbSet定义表
class DogConfig : EntityTypeConfiguration
{
public DogConfig()
{
this.ToTable("DOG_TABLE");
...
}
}
Run Code Online (Sandbox Code Playgroud)
现在,如果我有表名和DbContext,我怎样才能获取并使用正确的DbSet?
void foo()
{
string tableName = this.GetTableName();
using(Animals context = new Animals())
{
/* Made up solution */
DbSet animalContext = context.Where(c => c.TableName == tableName);
...
/* Do something with DbSet */
...
}
}
Run Code Online (Sandbox Code Playgroud) 我有DbContext几个DbSet<T>属性:
public virtual DbSet<A> A { get; set; }
public virtual DbSet<B> B { get; set; }
public virtual DbSet<C> C { get; set; }
...
Run Code Online (Sandbox Code Playgroud)
在某些情况下,我现在必须能够以实体名称作为字符串检索特定的DbSet(例如,当用户输入"A"时,我需要获取Dbset<A>).
在以前的EF版本中,以下是可能的:
var dbset = Context.Set(Type.GetType(A));
使用当前版本的EF核心有类似的方法吗?我已经尝试了几种方法来实现这一点,但我现在使用它的唯一方法是使用一个相当丑陋的开关/案例,我想摆脱它.
我在这里发现了几个类似问题的帖子,但它们都与早期的.NET Core版本或EF5/EF6有关.