如何遍历泛型中的所有DbSet?

时间:2016-05-27 12:54:21

标签: c# entity-framework reflection iteration

(我在这里使用EF6) 假设我有一个抽象类:

public abstract class MyContext<T> : DbContext

让我们使用它:

public class MyTestContext : MyContext<MyTestContext>
{
    public DbSet<Object1> Object1 { get; set; }
    public DbSet<Object2> Object2 { get; set; }
}

现在,我想在我的抽象类中迭代MyTestContext中的所有DbSets。似乎这会起作用(这是我的抽象类中的方法):

var dbSetProperties = typeof(T).GetProperties().Where(p => p.PropertyType == typeof(DbSet<>));

然而我得到了&#34;枚举没有产生结果&#34;。

我在这里做错了什么?谢谢!

编辑注意 - 我不希望事先了解泛型类型参数 - 我实际上想要确定每个DbSets中的类型。

1 个答案:

答案 0 :(得分:4)

因此Foo<T>不属于Foo<>类型。您需要获取Foo<T>的泛型类型定义并进行比较。

var dbSetProperties = typeof(MyTestContext)
    .GetProperties()
    .Where(p => p.PropertyType.GetGenericTypeDefinition() == typeof(DbSet<>));