2012-09-23 18 views

Respuesta

6

necesita acceder a la MetadataWorkspace

public class MyContext : DbContext 
{ 

    public void Test() 
    {    
     var objectContext = ((IObjectContextAdapter)this).ObjectContext; 

     var mdw = objectContext.MetadataWorkspace; 

     var items = mdw.GetItems<EntityType>(DataSpace.CSpace); 
     foreach (var i in items) 
     { 
      Console.WriteLine("Class Name: {0}", i.Name); 
     } 
} 
+0

tnx, pero necesito acceso a la clase POCO. Tipo, propiedades y atributos de las propiedades: las instancias de EntityType devuelven la implementación propia en Propiedades, Propiedades, Metadatos, etc. – DrAlligieri

+0

@DrAlligieri Puede obtener el nombre completo del tipo y luego usa reflexiones para acceder a propiedades y atributos. – Eranga

+0

FullName devuelve "CodeFirstDatabaseSchema.TypeNameThere", CodeFirstDatabaseSchema - es el espacio de nombres incorrecto para la clase POCO – DrAlligieri

4

@Lei Yang: se puede usar esto para conseguir todo tipo en una lista.

var objectContext = ((IObjectContextAdapter) dbContext).ObjectContext; 
var mdw = objectContext.MetadataWorkspace; 
var items = mdw.GetItems<EntityType>(DataSpace.CSpace); 

var dbContextAssembly = dbContext.GetType().Assembly; 

var entityTypes = new List<Type>(); 
foreach (var i in items) { 
    entityTypes.Add(dbContextAssembly.GetType(i.FullName)); 
} 
3

Por desgracia, no pude editar las respuestas aceptadas - sólo tiene que cambiar el espacio de datos utilizado de la siguiente manera

var items = mdw.GetItems<EntityType>(DataSpace.OSpace); 

para que las clases POCO lugar de los proxies de EF.

Cuestiones relacionadas