2012-09-23 15 views

risposta

6

è necessario accedere al 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, ma ho bisogno di accedere alla classe POCO Tipo, proprietà e proprietà attributi - Istanze EntityType restituisce la propria implementazione in Proprietà, ProprietàMetadata ed ecc. – DrAlligieri

+0

@DrAlligieri È possibile ottenere il nome completo del tipo e quindi utilizzare le riflessioni per accedere a proprietà e attributi. – Eranga

+0

FullName restituisce "CodeFirstDatabaseSchema.TypeNameThere", CodeFirstDatabaseSchema - è uno spazio dei nomi errato per la classe POCO – DrAlligieri

4

@Lei Yang: è possibile utilizzare questo per ottenere tutti i tipi in un elenco.

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

Purtroppo, non ho potuto modificare le risposte accettate - solo bisogno di cambiare lo spazio dati utilizzato come segue

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

per ottenere le vostre classi POCO invece delle deleghe EF.

Problemi correlati