2016-05-27 12 views
2

(私はここEF6を使用しています) 私は抽象クラスを持っていると言う:ジェネリックですべてのDbSetを反復処理する方法は?

public abstract class MyContext<T> : DbContext 

との使用にそれを入れてみましょう:

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

、私はすべてのDbSetsを反復処理したいと言います私の抽象クラスのMyTestContextで。 (これは私の抽象クラスのメソッドである)、これはうまくいくようだ:

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

しかし、私は、「列挙は何の結果が得られません」を取得します。

私はここで間違っていますか?ありがとう!

編集注 - 私は、フロントアップジェネリック型引数を知ることを期待していない - 私は実際にDbSetsのそれぞれであるかの種類を決定するために探しています。

+1

プロパティはDbSet <>型ではなく、一般的な定義はです。 –

答えて

4

したがってFoo<T>Foo<>ではありません。 Foo<T>のジェネリック型定義を取得し、それらを比較する必要があります。

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

ハは、振り返ってみるととても分かりやすいようです。ありがとう、それはそれをしました。私はあなたに答えをあげます...ああ.. 6分:) – John

関連する問題