相关疑难解决方法(0)

如何根据表名在DbContext中选择正确的DbSet

假设我有一个带有以下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)

c# linq reflection entity-framework

9
推荐指数
1
解决办法
1万
查看次数

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

我有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有关.

c# entity-framework

9
推荐指数
1
解决办法
3608
查看次数

标签 统计

c# ×2

entity-framework ×2

linq ×1

reflection ×1