2012-09-23 21 views

Trả lời

6

Bạn cần truy cập vào 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, nhưng tôi cần quyền truy cập vào các thuộc tính Loại, thuộc tính và thuộc tính POCO lớp - Các trường hợp EntityType trả về việc thực hiện riêng trong Properties, PropertiesMetadata và v.v. – DrAlligieri

+0

@DrAlligieri Bạn có thể lấy tên đầy đủ của loại và sau đó sử dụng phản xạ để truy cập các thuộc tính và thuộc tính. – Eranga

+0

FullName trả về "CodeFirstDatabaseSchema.TypeNameThere", CodeFirstDatabaseSchema - là không gian tên sai cho lớp POCO – DrAlligieri

4

@Lei Yang: bạn có thể sử dụng điều này để có được tất cả các loại vào một danh sách.

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

Thật không may, tôi không thể chỉnh sửa các câu trả lời được chấp nhận - bạn chỉ cần thay đổi dataspace sử dụng như sau

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

để có được lớp POCO của bạn thay vì các proxy EF.