私は、主に非同期のものにEF6を使用することにした新しいプロジェクトで、最初のリポジトリを単体テストしようとしています。モデルのIDbSetを偽装し、新しい非同期機能を使用する前にLinqを使用できるようにする問題があります。
この投稿で提供されている FakeDbSet を使用しています。次のような単純なクエリを実行すると、
await set.FirstOrDefaultAsync(e => e.Approved);
これはうまくいきます。
私がやろうとすると問題が発生します:
await set.OrderByDescending(e => e.Date)
.FirstOrDefaultAsync(e => e.Approved)`
次に、エラーが発生します。
System.InvalidOperationException: ソース IQueryable のプロバイダーは IDbAsyncQueryProvider を実装していません。
流暢な構文を分解し、各ステップで結果を調べると、IDbAsyncQueryProvider が最初の「通常の」Linq 演算子 ( OrderBy
、Where
または などSelect
) の後に消えることが明らかです。
どうすればこれを機能させることができますか?
更新(混乱があったため): 2 つのプロジェクトがあります。それらをリポジトリとテストと呼びます。もちろん、テストはリポジトリを参照します。への呼び出しWhere
は Repository で行われ、FakeDbSet については認識されません (テスト専用クラスであるため、FakeDbSet についても認識されません)。
更新 2 : 簡単なデモプロジェクトは、ここからダウンロードできます。単体テストを実行する前に、Nuget パッケージを復元します。