2017-11-07 3 views
1

Entity Framework 6を​​使用してデータベースアプリケーションを開発しています.1つの場所では、ユーザー入力に基づいてクエリをアセンブルし、 。私は自分でクエリを実行して、結果セットを返すことはできません。これは、呼び出し元がUIをリフレッシュした後に再度実行するためにクエリを保存する必要があるためです。また、組み立てられたクエリを表すIQueryableを返すことはできません。これは、それが組み立てられたコンテキストに対してのみ有効であるためです。Entity Framework 6を​​使用してクエリを「事前構築する」方法

私はCompiledQuery.Compileを使用してみましたが、これはEntity Framework 6のDbContextベースクラスでは機能しません。そのようなことをする必要があります。プリコンパイル/プリアセンブル/プレコンストラクション返され、後で再度実行されますが、Entity Framework 6で動作します。デリゲートなどの形式でクエリが返されるかどうかは関係ありません。特定のコンテキストインスタンスとは関係なくクエリを表すものが必要です。

異なるコンテキストインスタンスに対して複数回実行できるように、Entity Framework 6でクエリを事前に作成して返すにはどうすればよいですか?

+0

過去のEF4をプリコンパイルすると、クエリを1回実行してから動作し、その後、クエリが計算され、キャッシュされます。コンテキストに依存しないソリューションがあるとは思わない - あなたのコンテキストにはクエリの計算を可能にするマッピング情報が含まれている。 – DevilSuichiro

+0

**すべての**クエリは、アプリケーションドメインごとにEntity-Frameworkによってキャッシュされます。あなたが持っているdbcontext、いくつの...などは問題ではありません。エンジンがアプリケーションドメインを終了しないと判断するか、アプリケーションドメインが終了するまでキャッシュされても問題ありません。 –

+0

私は具体的にクエリをキャッシュするつもりはありません。実際には、クエリを作成して関数から返す方法を探していて、後で指定されたコンテキストに対してクエリを実行します。 –

答えて

0

最後に、クエリーをカプセル化するためのデリゲート型を作成しました。これはパラメータとしてMyDatabaseContextを返し、List<T>を返します。ここで、Tは、私が照会している特定のエンティティのタイプです。

これで、クエリを作成する関数は単純に関数を返すことができ、クエリを実行する必要があるときは、クエリを単にパラメータとして動作するコンテキストインスタンスを渡す関数として呼び出すだけです。この関数は、指定されたコンテキストから、それが表すクエリに適用可能なエンティティのリストを返します。

関連する問題