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() 没有返回底层对象的属性。我需要如何获取用户和角色对象。

任何帮助,将不胜感激,

谢谢

4

1 回答 1

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()只返回指定类型上可用的属性。如果您想要指定类型可能包含或使用的类型,则必须进行一些挖掘才能获得它们。

于 2012-05-02T23:08:05.667 回答