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对象。
任何帮助将不胜感激,
由于
答案 0 :(得分: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()
仅返回指定类型的可用属性。如果你想要包含或使用你指定类型的类型,你将不得不做一些挖掘来获得它们。