2012-09-23 4 views

答えて

6

あなたは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ですが、POCOクラスの型、プロパティ、およびプロパティの属性にアクセスする必要があります。EntityTypeインスタンスはProperties、PropertiesMetadataなどで独自の実装を返します。 – DrAlligieri

+0

@DrAlligieri反射を使用してプロパティと属性にアクセスします。 – Eranga

+0

FullNameは "CodeFirstDatabaseSchema.TypeNameThere"を返します。CodeFirstDatabaseSchema - POCOクラスの間違った名前空間です。 – DrAlligieri

4

@Leiヤンにアクセスする必要があります:あなたはリストにすべてのタイプを取得するためにこれを使用することができます。

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

残念ながら、私は受け入れられて答えを編集することができませんでした - あなただけの

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

を次のようにあなたのPOCOクラスの代わりに、EFプロキシを取得するために使用されるデータスペースを変更する必要があります。

関連する問題