2012-09-23 3 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

불행하게도, 내가 허용 대답을 편집 할 수 있습니다 - 당신은 당신의 POCO 클래스 대신 EF 프록시를 얻을

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

을 다음과 같이 사용 dataspace을 변경해야합니다.