Search code examples
c#entity-frameworkgeneric-type-argument

Entity Framework and Generic Type Parameter


I have a database with several hundred tables imported from a third source. Using entity framework, these tables become ObjectSets labeled E_1, E_2, E_3... All of the tables have a common set of columns and can be queried with one function.

I have the following code:

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

In test(), I pass the string "E_1" to the function getData(), and I also insert type class Foo.E_1 into getData<> as the generic type parameter.

In reality, E_1 isn't known until run time. At run time, I create the entityName string, but how can I then convert this string into the generic parameter type needed for getData<>?

Thanks.


Solution

  • All of the tables have a common set of columns

    So you can make one class (e.g. MyImportType) to capture the results of your query, and use ExecuteStoreQuery in stead of ObjectQuery

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

    And getData does not need a generic type parameter.

    As aside: I agree with TomTom that the db design is very bad. If you can, at least merge the tables with identical columns into one table.