2012-06-25 4 views
0

У меня есть база данных с несколькими сотнями таблиц, импортированных из третьего источника. Используя структуру сущностей, эти таблицы становятся объектами с метками E_1, E_2, E_3 ... Все таблицы имеют общий набор столбцов и могут быть запрошены с помощью одной функции.Entity Framework и параметр общего типа

У меня есть следующий код:

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); 
     } 
} 

В тесте(), я передать строку "E_1" в функцию GetData(), и я также вставить тип класса Foo.E_1 в GetData <> как параметр типового типа.

В действительности E_1 неизвестен до времени выполнения. Во время выполнения я создаю строку entityName, но как я могу затем преобразовать эту строку в общий тип параметра, необходимый для getData <>?

Спасибо.

+0

Вам нужно будет убедиться, что E_1 является классом, чтобы использовать его как ограничение общего типа/параметр – Kane

ответ

0

Все таблицы имеют общий набор столбцов

Таким образом, вы можете сделать один класс (например, MyImportType), чтобы захватить результаты запроса, и использовать ExecuteStoreQuery в смену ObjectQuery

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

И getData не нуждается в параметре общего типа.

Как в стороне: я согласен с TomTom в том, что дизайн db очень плохой. Если вы можете, по крайней мере, объединить таблицы с одинаковыми столбцами в одну таблицу.

+0

Спасибо, это сработало отлично! (Дизайн db не так плох, как кажется. Я упростил его для этого примера, чтобы перейти к вопросу.) – user1326717

0

В действительности, E_1 не известно до времени выполнения

Anjd что в действительности является:

  • очень плохой дизайн базы данных и
  • то не поддерживается Entity Framework.

Простой, как этот.

Смежные вопросы