0

製品テーブルである行が多いテーブルがあります。ユーザーがWebサイトを検索すると、このテーブルから選択を行い、選択でIncludeメソッドも使用します。プロファイラーを使用し、EFが生成することに気付きました。多くの内部結合、左結合などを使用したクエリ。

私がやりたかったのは、このselectクエリを使用して、同じデータベースの一時キャッシュテーブルに結果を挿入することです。その後、x分ごとにこのテーブルを更新するサービスを作成できます。

問題は、EFがこのキャッシュテーブルを使用して行を選択するようにするには、結合を使用して製品テーブルにクエリを実行するたびに*を選択するのではなく、どうすればよいですか?

ありがとう!

4

1 に答える 1

1

EFには一時テーブルのサポートがないことは確かです-少なくともそのままでは-しかし、それは常に変化しています。

あなたの最善の策は、このようなことをすることです...

dbcontext.Database.ExecuteSqlCommand("...")

...そして、そこで任意のSQLを実行できると思います(ほとんどのものを渡すことができることは知っていますが、制限についてはわかりませんが、SPを実行したり、インデックスを作成したりできます)-セットアップする一時テーブル。

次に、次のステップは、このような反対側を行うことです..

dbcontext.MyTable.SqlQuery("...").ToList()

...SQLの結果をあなたのエンティティに戻すか、マップされていないエンティティを文字列などにマップします。( dbcontext.MyTable.SqlQuery<T>("...").ToList())

問題は、それを正確に行う方法です-あなたの詳細が本当にわからない. ただし、事前に一時テーブルを作成してマップし、一時的な目的で使用することもできます。

基本的に、それは DBA の考え方ですが、EF はそのようなことには完全ではありません (ここで似たようなものを参照してくださいEntity Framework 4 での一時テーブルまたはテーブル変数の使用を推奨します。 パフォーマンス エンティティ フレームワークの更新) 。その上。

それが役に立てば幸い

編集:これはEFフォーラムからも役立つかもしれませんが、より複雑です。

于 2012-04-04T23:14:10.580 に答える