(我在这里使用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中的所有DbSet。似乎可以正常工作(这在我的抽象类的方法中):

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


但是我得到“枚举没有结果”。

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

编辑注意-我不希望预先知道泛型类型参数-我实际上是在确定每个DbSet中的类型。

最佳答案

因此,Foo<T>的类型不是Foo<>。您需要获取Foo<T>的通用类型定义并进行比较。

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

关于c# - 如何遍历泛型中的所有DbSet?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37484106/

10-12 15:43