2012-09-23 13 views

Antwort

6

Sie benötigen für den Zugriff auf die 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, aber ich brauche Zugriff auf POCO-Klasse Typ, Eigenschaften und Eigenschaften Attribute - EntityType-Instanzen gibt eigene Implementierung in Eigenschaften, PropertiesMetadata und etc. – DrAlligieri

+0

@DrAlligieri Sie können den vollständigen Namen des Typs und erhalten Verwenden Sie dann Reflexionen, um auf Eigenschaften und Attribute zuzugreifen. – Eranga

+0

FullName gibt "CodeFirstDatabaseSchema.TypeNameThere" zurück, CodeFirstDatabaseSchema - ist falscher Namespace für die POCO-Klasse – DrAlligieri

4

@Lei Yang: Sie diese verwenden können alle Arten in eine Liste zu erhalten.

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

Leider konnte ich die akzeptierten Antworten nicht bearbeiten - Sie müssen nur den Datenraum verwendet ändern, wie

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

folgt Ihre POCO Klassen zu erhalten, anstatt die EF-Proxies.