通过实体框架中的变量引用表
Posted
技术标签:
【中文标题】通过实体框架中的变量引用表【英文标题】:Reference Table through a variable in Entity Framework 【发布时间】:2017-01-04 03:13:05 【问题描述】:我在数据库 Table1、Table2 等中有 5 个表 [所有表都有相同的列名或表定义]。我在 MVC 应用程序和 C# 中使用实体框架。
-
首先创建一个Database的db对象。
以 db.Table1.ToList(); 形式获取表数据。
我想做这样的事情。
list<string> TableNames = new list<string>();
db.TableNames[1].ToList();
现在我知道这行不通,但是有什么方法可以在不对表名进行硬编码的情况下获取数据,因为我的项目将处理 100 个具有相同列名但数据不同的表。 这是一个医院项目,它将接收来自不同位置的数据。假设对于位置 A,我预计每天有 100 个案例,现在我有 10 个位置。因此,如果我将所有这些数据合并为一个,这意味着一天内每天有 1000 条记录,因此超时搜索此表将变得对性能敏感。
【问题讨论】:
如果你有相同的列名,你不应该有数百个表。一张表(多出一列)就足够了。我建议你想那个方向。 这听起来像是数据库设计错误。在为时已晚之前修复它 Buddy 每个表都包含一个位置的数千条记录,如果我说的是 100 个表,我通过创建一个新列将这 100 个表的数据放在一个中,而不是性能应用程序将受到不利影响。 【参考方案1】:我写这篇文章是为了那些可能会陷入同样困境的人..... 我通过 EF 引用了一个表,因此这些类被生成到模型中。 假设我有 3 个相同架构的表 tbl_Loc1、tbl_Loc2 和 tblLoc3。
public void getDataFromTable(string TableName)
using(var ctx = new DBEntities())
string query ="Select * from " +TableName;
var data=ctx.tbl_Loc1.SqlQuery(query);
DBEntities 是数据库连接字符串
在 ctx.tbl_Loc1.SqlQuery(query);....... tbl_loc1 在模型中有一个类,这将有助于获取相同格式的数据[与所有表一样具有相同的表定义]
EF 中有 tbl_Loc1 的模型,而 tbl_Loc2 和 tbl_Loc3 仅在数据库中。 将此数据作为 IEnumerable 列表返回 http://www.entityframeworktutorial.net/Querying-with-EDM.aspx【讨论】:
【参考方案2】:我回应其他评论者的想法,您可能可以在一个表中处理这一切,并带有一个可区分的列(以及表上的一些适当索引)。到目前为止,您提到的只有数十万条记录,应该仍然表现得非常好。
但是,为了按照您声明的方式执行您想要的操作,您可以使用反射来检查您的 db 对象的属性。其中任何作为哈希集的属性都是表示表的属性,因此您可以获得所有哈希集属性及其名称的列表(可能对复数形式进行一些调整),这将为您提供表名。
要在 EF 中更复杂地使用元数据,请查看 How I can read EF DbContext metadata programmatically?。
此外,您可能会发现 SMO 是处理此类事情的一种有用方法(没有什么阻止您使用它和 EF)。
【讨论】:
以上是关于通过实体框架中的变量引用表的主要内容,如果未能解决你的问题,请参考以下文章