2012-09-23 13 views

Odpowiedz

6

Trzeba otworzyć 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, ale potrzebuję dostępu do klasy POCO Atrybuty typu, właściwości i właściwości - Instancje EntityType zwracają własną implementację we właściwościach, właściwościach metadanych itd. – DrAlligieri

+0

@DrAlligieri Możesz uzyskać pełną nazwę typu i następnie użyj refleksów, aby uzyskać dostęp do właściwości i atrybutów. – Eranga

+0

FullName zwraca "CodeFirstDatabaseSchema.TypeNameThere", CodeFirstDatabaseSchema - jest niepoprawną przestrzenią nazw dla klasy POCO – DrAlligieri

4

@Lei Yang: można to wykorzystać, aby uzyskać wszystkie typy do listy.

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

Niestety, nie mogę edytować zaakceptowane odpowiedź - wystarczy zmienić dataspace używany następująco

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

aby uzyskać klas POCO zamiast serwerów proxy EF.

Powiązane problemy