【发布时间】:2017-12-20 16:19:06
【问题描述】:
我有一个 DbContext 和几个 DbSet<T> 属性:
public virtual DbSet<A> A { get; set; }
public virtual DbSet<B> B { get; set; }
public virtual DbSet<C> C { get; set; }
...
在某些情况下,我现在必须能够以字符串形式检索实体名称的特定 DbSet(例如,当用户输入“A”时,我需要获取 Dbset<A>)。
在以前的 EF 版本中,可以进行以下操作:
var dbset = Context.Set(Type.GetType(A));
当前版本的 EF 内核是否有类似的方法?我已经尝试了几种方法来实现这一点,但目前我让它工作的唯一方法是使用一个相当丑陋的开关/外壳,我想摆脱它。
我在这里发现了几篇有类似问题的帖子,但它们都与早期的 .NET Core 版本或 EF5 / EF6 有关。
【问题讨论】:
-
我猜this 会有所帮助
-
好的,仍然没有您可以从@JohnyL 链接中看到的方法。这是因为没有非通用的
DbSet类。问题是你真的需要这种方法吗?因为大多数DbSet<T>方法都是从DbContext以及非泛型版本(Attach、Add、Remove、Update、Find等)公开的,所以只采用非泛型@987654336 @ by entity type 可能是个问题。 -
感谢@JohnyL 和 ivan-stoev,这帮了大忙。虽然我现在更好地理解为什么没有这种方法,但我仍然同意 GitHub 上的最后一条评论 - 有时在设计时根本不可能知道确切的实体类型。