2012-09-23 16 views

cevap

6

Sen 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, ancak POCO sınıfına, tip ve özellik özelliklerine erişmem gerekiyor - EntityType örnekleri, Properties, PropertiesMetadata ve etc içinde kendi uygulamanızı döndürür. – DrAlligieri

+0

@DrAlligieri Yazının tam adını alabilir ve daha sonra özellik ve niteliklere erişmek için yansımaları kullanın. – Eranga

+0

FullName "CodeFirstDatabaseSchema.TypeNameThere" değerini döndürür, CodeFirstDatabaseSchema - POCO sınıfı – DrAlligieri

4

@Lei Yang erişmek gerekir: Eğer bir liste halinde her türlü almak için bunu kullanabilir.

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

Ne yazık ki, kabul cevapları düzenleyemiyordu - Az önce POCO sınıfları yerine EF vekiller almak için

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

aşağıdaki gibi kullanılan DATASPACE değiştirmeniz gerekir.