2017-10-31 18 views
0

エンティティフレームワークを使用して、エンティティをデータベースに格納します。リポジトリパターンを使用して、非常に複雑なLinqクエリをラップします。 単純なメモリコレクションに対してこれらのクエリを単体テストする必要があります。これは、SQL型のrowversionを使用して、最後に追加されたレコードを検索するクエリを実行するまで、問題なく機能します。 EntityFrameworkは、このLinqをSQLに変換することができます。LinqクエリでSqlバージョンとC#バイト配列を処理する方法

行バージョンは、オブジェクトがデータベースから再水和されたときにulong(?)に収まるには大きすぎるため、C#によってバイト配列に変換されます。

これらのバイト配列をメモリ内テストデータに追加します。 しかし、私たちのメモリセットに対してクエリを実行した場合、Linqはバイトの配列として爆発的に爆発的になりますので、必要な並べ替えを実行できません。

バイト配列で動作する比較関数を作成しました。この比較関数をクエリで使用すると、メモリで正常に動作します。

しかし、LinqToEntitiesはコンペアラでクエリを処理できません。

我々はキャッチ22で立ち往生しているように見える...

はメモリとLinqToEntitiesに機能するソリューションを誰がいますか?

+0

あなたがのIQueryableとメモリコレクションでラップし、そのロジックをテストするためにそれを使用している場合DBのような別のIQueryableソースに対して実行しようとしています。あなたのテストは良くないので何も証明しません。同じ表現は、論理的には同等ではないかもしれません(特に、それがヌルを含む場合)。 – Mant101

+0

私はそれが同じではないことに同意しますが、私たちの左の結合がnullを処理できるように注意します。それでも、我々はまだ展開されたDBに対してテストセットを実行します。しかし、4000台のテストすべてでそれを実行すると、実際にビルドサーバーが壊れてしまいます。 –

答えて

0

これはあなたの比較子として... Compare(this byte[]を実装するとそれを組み合わせる場合は周りの仕事のように思える:

https://stackoverflow.com/a/19402565/2557128

+0

その解決策はOrderByまたはMaxでは機能しません。データベースが重い作業をした後、最終的なフィルタをメモリに入れようとしています –

+0

'OrderBy(rowversion.Compare())'のようなことはできませんでしたか? – NetMage

+0

メモリ内のクエリでは動作しますが、SQLに変換することはできません –

関連する問題