我在数据库Table1,Table2等中有5个表[所有表都有相同的列名或表定义]。我在MVC应用程序和C#中使用Entity Framework。
我想做这样的事情。
list<string> TableNames = new list<string>();
db.TableNames[1].ToList();
现在我知道这不会起作用,但是我可以通过任何方式获取数据而无需对表名进行硬编码,因为我的Project将处理具有相同列名但数据不同的100个表。 这是一个医院项目,将接收来自不同地点的数据。让我们说位置A我期待每天100个案件,现在我有10个位置。因此,如果我将所有这些数据合并为一个,这意味着每天在一天内记录1000条记录,那么通过此表格进行加班搜索将会对性能敏感。
答案 0 :(得分:1)
我正在为那些可能陷入同样困境的人写这篇文章..... 我通过EF引用了一个表,因此类生成了Model。 假设我有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在模型中有一个类,它有助于以相同的格式获取数据[如所有表格具有相同的表格定义]
答案 1 :(得分:0)
我回应其他评论者的想法,你可能会在一个表中使用一个有区别的列(以及表上的一些适当的索引)处理这一切。到目前为止你所提到的只有数十万条记录,这些记录仍应表现得非常好。
但是,为了按照您所说的方式执行操作,可以使用反射来检查db对象的属性。其中属于hashset的任何属性都是表示表的属性,因此您可以获取所有hashset属性及其名称的列表(可能需要进行一些关于复数的调整),这将为您提供表名。 / p>
要在EF中更复杂地使用元数据,请查看How I can read EF DbContext metadata programmatically?。
另外,你可能会发现SMO对这种事情是一种有用的方法(没有什么能阻止你使用和 EF)。