2012-05-02 40 views
0
public class MyContext: DbContext 
{ 
    public MyContext() : base("VidallyEF") {} 

    public DbSet<User> Users { get; set; } 
    public DbSet<Role> Roles { get; set; } 
    public DbSet<Contest> Contests { get; set; } 
    public DbSet<Comment> Comments { get; set; } 
    public DbSet<Submission> Submissions { get; set; } 
} 

我想遍歷MyContext的屬性,然後通過每個屬性的屬性。我有這樣的:迭代通過嵌套的屬性,當一些可能是通用的

foreach (var table in typeof(MyContext).GetProperties()) 
      { 
       // TODO add check that table is DbSet<TEntity>..not sure.. 

       PropertyInfo[] info = table.GetType().GetProperties(); 

       foreach (var propertyInfo in info) 
       { 
        //Loop 
        foreach (var attribute in propertyInfo.GetCustomAttributes(false)) 
        { 
         if (attribute is MyAttribute) 
         { 
          //do stuff 
         } 
        } 
       }   

      } 

的問題是,由於MyContext的屬性是仿製藥,對GetType()的GetProperties()沒有返回底層對象的屬性。一些我需要去用戶和角色對象。

任何幫助,將不勝感激,

感謝

回答

3

有上的PropertyInfo提供的幾件事情,這將是有幫助的。 IsGenericType會告訴您屬性類型是否爲通用屬性,並且GetGenericArguments()調用將返回包含泛型類型參數類型的Type數組。

foreach (var property in someInstance.GetType().GetProperties()) 
{ 
    if (property.PropertyType.IsGenericType) 
    { 
     var genericArguments = property.PropertyType.GetGenericArguments(); 
     //Do something with the generic parameter types     
    } 
} 

還需要注意GetProperties()只返回指定類型的可用屬性。如果你想要包含或使用你指定的類型,你將不得不做一點挖掘才能得到它們。

+0

謝謝 - PropertyType是我的缺失鏈接。 – Prescott