0

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

我有以下代码:

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<> 中。

实际上,E_1 直到运行时才知道。在运行时,我创建了 entityName 字符串,但我如何才能将此字符串转换为 getData<> 所需的通用参数类型?

谢谢。

4

2 回答 2

0

所有表都有一组共同的列

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

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

getData 不需要泛型类型参数。

顺便说一句:我同意 TomTom 的观点,即数据库设计非常糟糕。如果可以,至少将具有相同列的表合并到一个表中。

于 2012-06-25T09:54:14.200 回答
-1

实际上,E_1 直到运行时才知道

Anjd实际上是:

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

就这么简单。

于 2012-06-25T04:51:53.573 回答