c# - 使用实体框架按名称获取表
问题描述
我有这段代码,一切正常。
using (var db = new ApplicationDbContext())
{
md = db.Modles.ToList();
}
我的问题是我有一个名为的参数M
,这是我创建的模型的名称,所以它可以是动态的。
有没有办法做这样的事情:
var M = "Modles"; // or M = "Modles2"
using (var db = new ApplicationDbContext())
{
md = db[M].ToList();
}
我试过Entity Framework Get Table By Name和Entity Framework get table by variable name但没有任何运气。这可以做到吗?
解决方案
您提供的第二个链接上的解决方案实际上不起作用,因为它缺少一个简单的步骤:该方法Set
是DbContext
一个通用方法,因此您不能在不告诉类型的情况下简单地调用它,无论是在编译时还是至少在运行时。由于您希望动态调用它,因此运行时解析是您剩下的选项。以下示例应该有效:
var entityNs = "myentities";
var table = "Model";
var entityType = Type.GetType($"{entityNs}.{table}");
var methodInfo = typeof(ApplicationDbContext).GetMethod("Set");
var generic = methodInfo.MakeGenericMethod(entityType);
dynamic dbSet = generic.Invoke(myContext, null);
var list = dbSet.GetList();
推荐阅读
- java - 使用TestNG可以使用预条件测试scnarios时如何并行执行黄瓜功能文件
- php - 通过 Red Bean PHP 通过 SSL 连接到 PGSQL
- python-3.8 - 如何获取熊猫中最大值和最小值出现的年份
- java - 如何在没有openCV的情况下减少灰度图像的噪声?
- python - ipynb:突出显示 VSCode ipython 笔记本中其他出现的选定变量
- sql - 在 WHERE 中创建列名作为大小写
- excel - 隐藏除基于组合框值的列之外的列
- carrot2 - 使用 carrot2 调整 Lingo 参数(使用 PHP)
- android - 如何使用异步任务。如何调用它以及如何为整个应用程序创建一个数据库实例?
- javascript - 如何使用时间戳设置日期选择器的值