我有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有关.
我正在尝试type从给定的字符串中获取实体的 。我的最终目标是为用户制作一个界面(UI 界面),让用户有一个 GUI 来探索我的数据库。他们基本上有一个表及其字段的树,当他们选择字段时,我想在后端建立 SQL 查询并返回数据。我被困在如何获得类型上。
我正在尝试将这些线程之间的解决方案钉在一起:
这是我目前的尝试:
var type1 = _dbContext.Model.FindEntityType("Chadwick.Database.Entities.Appearances");
var type = _dbContext.Appearances.GetType();
var context = _dbContext.Set(typeof(Appearance)); // this works. I just need to pass in a variable instead of the actual type
var stuff = await context.FromSql("SELECT TOP 100 * FROM Appearances").ToListAsync();
// var data = await _dbContext.Appearances.Select(a => new {a.PlayerId}).Take(100).ToListAsync();
return new OkObjectResult(stuff);
Run Code Online (Sandbox Code Playgroud)
本质上,我永远不会知道它们是在“外观”之后,所以我不能只提供确切的类型,我需要从上下文中(通过字符串)获取它。
有没有办法通过字符串获取实际类型?
我知道我可以做这样的事情,但它似乎是多余的(大约有 20 张桌子,而且还会更多)
public …Run Code Online (Sandbox Code Playgroud)