0

私は実際に、非常に大きな linq to entity クエリ (約 250 行) を使用するプロジェクトに取り組んでおり、多くの異なるエンティティを操作しています。

このクエリはいくつかのパラメーター (最大 3 または 4) に依存するため、クエリの式ツリーを "保存" し、このようにいくつかのパラメーターだけでこれを変更することを考えています。

IQueryable<Foo> myQuery = 
  GetBaseQuery()
  .Where(a => a.Param1 == "foo")
  .Where(a => a.Param2 == "bar");

コンパイルされたクエリを使用する以外に、それを行う方法はありますか?

この問題にはいくつかの条件があります

  • 私は DbContext を使用していますが、ObjectContext に変更することは困難です。これは、コンパイルされたクエリを使用するための前提条件のようです。
  • 私は Visual Studio 2010 を使用しているため、.NET 4 とエンティティ フレームワーク 4.3 に制限されています (残念ながら .NET 4.5、EF5、および自動コンパイルされたクエリはありません)。

それで、方法はありますか

  • 「ベース」として使用され、生成にあまり時間がかからない式ツリーを保存しますか?
  • または、Visual Studio 2010 で .NET 4.5 を使用していますか?
  • または、DbContext でコンパイル済みクエリを使用する

本当にありがとうございます!

4

1 に答える 1

1

行間を読むと、DbContext でコンパイルされたクエリが必要なようです。(これは LINQ 式ツリーの保存と実際には同じではありませんが、とにかく行ったテストではパフォーマンスのボトルネックではないようです。) 私が知る限り、あなたが持っているオプションは次のとおりです。

  • .NET 4.5 で EF5 を使用します。VS2010 を使用していて .NET 4 をターゲットにしている場合でも、アプリが実行されているマシンに .NET 4.5 をインストールすると、自動コンパイルされたクエリが取得されます。
  • .NET 4 または .NET 4.5 で EF6 を使用します。EF6 では、自動コンパイルされたクエリ コードが .NET Framework から移動されるため、.NET 4 で実行されている場合でも使用されます。
  • ObjectContext と CompiledQuery を使用する

CompiledQuery を DbContext で使用する方法を知りません。また、これを機能させる計画もありません。

于 2012-11-07T23:43:46.770 に答える