实体框架和通用类型参数

时间:2012-06-25 04:05:05

标签: c# entity-framework generic-type-argument

我有一个包含从第三个源导入的数百个表的数据库。使用实体框架,这些表成为标记为E_1,E_2,E_3的ObjectSets ...所有表都有一组共同的列,可以使用一个函数进行查询。

我有以下代码:

namespace Foo{
    public static class Data{

       public static MyEntities dataContext = new MyEntities();

       public static void getData<T>(string entityName) where T : class
       {
          string queryString = "SELECT result FROM ";
          queryString += Data.dataContext.DefaultContainerName + "." + entityName;

          ObjectQuery<T> myQuery = Data.dataContext.CreateQuery<T>(queryString, null);

        // do stuff
       }

       public static void test(){
         string entityName = "E_1";
         Data.getData<E_1>(entityName);
       }
}

在test()中,我将字符串“E_1”传递给函数getData(),并且还将类型类Foo.E_1插入到getData&lt;&gt;中。作为泛型类型参数。

实际上,E_1直到运行时才知道。在运行时,我创建了entityName字符串,但是如何将此字符串转换为getData&lt;&gt;所需的泛型参数类型?

感谢。

2 个答案:

答案 0 :(得分:0)

  

实际上,E_1在运行时才知道

现实中的Anjd是:

  • 数据库设计非常糟糕
  • 实体框架不支持。

很简单。

答案 1 :(得分:0)

  

所有表格都有一组共同的列

因此,您可以创建一个类(例如MyImportType)来捕获查询结果,并使用ExecuteStoreQuery代替ObjectQuery

var data = Data.dataContext.ExecuteStoreQuery<MyImportType>(queryString);

getData不需要泛型类型参数。

除此之外:我同意TomTom的数据库设计非常糟糕。如果可以,至少将具有相同列的表合并到一个表中。

相关问题