参考表通过实体框架中的变量

时间:2016-08-27 16:33:38

标签: c# mysql sql-server asp.net-mvc entity-framework

我在数据库Table1,Table2等中有5个表[所有表都有相同的列名或表定义]。我在MVC应用程序和C#中使用Entity Framework。

  1. 首先创建数据库db的对象。
  2. 将表数据作为db.Table1.ToList();。
  3. 获取

    我想做这样的事情。

    1. list<string> TableNames = new list<string>();
    2. db.TableNames[1].ToList();
    3. 现在我知道这不会起作用,但是我可以通过任何方式获取数据而无需对表名进行硬编码,因为我的Project将处理具有相同列名但数据不同的100个表。 这是一个医院项目,将接收来自不同地点的数据。让我们说位置A我期待每天100个案件,现在我有10个位置。因此,如果我将所有这些数据合并为一个,这意味着每天在一天内记录1000条记录,那么通过此表格进行加班搜索将会对性能敏感。

2 个答案:

答案 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在模型中有一个类,它有助于以相同的格式获取数据[如所有表格具有相同的表格定义]

  • EF中有tbl_Loc1模型,而tbl_Loc2和tbl_Loc3仅存在于数据库中。
  • 将此数据作为IEnumerable list
  • 返回
  • http://www.entityframeworktutorial.net/Querying-with-EDM.aspx

答案 1 :(得分:0)

我回应其他评论者的想法,你可能会在一个表中使用一个有区别的列(以及表上的一些适当的索引)处理这一切。到目前为止你所提到的只有数十万条记录,这些记录仍应表现得非常好。

但是,为了按照您所说的方式执行操作,可以使用反射来检查db对象的属性。其中属于hashset的任何属性都是表示表的属性,因此您可以获取所有hashset属性及其名称的列表(可能需要进行一些关于复数的调整),这将为您提供表名。 / p>

要在EF中更复杂地使用元数据,请查看How I can read EF DbContext metadata programmatically?

另外,你可能会发现SMO对这种事情是一种有用的方法(没有什么能阻止你使用 EF)。