2011-03-15 42 views
18

En LINQ to SQL, puedo crear un repositorio dinámicamente usando DataContext.GetTable<T>. ¿Hay alguna manera similar de hacer esto en Entity Framework 4 que no sea declarar las propiedades en el DbContext específico? Por ejemplo:Crear un DbSet <T> dinámicamente en Entity Framework?

public MyDbContext: DbContext 
{ 
    public DbSet<MySet> MySets {get; set;} 
} 

me gustaría saber cómo puedo crear/obtener una referencia a MySets dinámicamente a medida que puedo con LINQ to SQL como en:

var mySet = MyDbContext.GetTable<MySet>(); 

Respuesta

33

DbContext tiene método para esto:

var set = context.Set<MyEntity>(); 
+0

He utilizado algo similar en mi proyecto, pero me encontré con un pequeño problema. El DbSet se crea dinámicamente y el gráfico en memoria funciona bien; Sin embargo, cuando llega el momento de almacenar los datos en la base de datos, p. context.SaveChanges() la siguiente excepción es throws: nombre de objeto inválido 'dbo.CustomModel'. – ppoliani

+0

Parece que hay algún problema con su asignación porque intenta acceder al objeto db que no existe –

15

uso:

DbSet<MyEntity> set = context.Set<MyEntity>(); 

O, si no se puede utilizar el método genérico:

DbSet set = context.Set(
    typeof(MyEntity) 
); 

No se preocupe por segunda carga y la duplicación de a poco. Los conjuntos se almacenan en caché internamente por el contexto.

Cuestiones relacionadas