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() が基になるオブジェクトのプロパティを返さないことです。User および Role オブジェクトに到達する方法について説明します。

どんな助けでも大歓迎です、

ありがとう

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 に答える