2

EF4.xまたはEF5でSQLServiceBrokerを使用できるかどうかを知りたいのですが。

シナリオ:たとえば、製品のリストがあります。顧客がページにアクセスするたびにdbからリストをロードしたくありません。確かにページをキャッシュすることはできますが、プロダクトマネージャーが新しい商品を追加した場合、キャッシュの有効期限が切れるまで、またはクエリパラメータが変更されるまで、すぐには表示されません。

解決策:SQLではEnable_Brokerを使用でき、WebアプリではSqlDependencyのリンクを開始できます。SQLはWebアプリに通知を送信します。したがって、スマートな「キャッシング」システムがあります。そのスマートキャッシュを使用できれば、すべて意味があります。1,000人の顧客がそのページをクリックしている場合、SQLデータベースに1,000回アクセスする必要はありません。ただし、dbに変更があると、その時点でそのページにアクセスした最初の顧客に反映が表示されます。私たちは両方の世界の長所を手に入れます。

問題:EntityFrameworkはこの機能を公開していません。または私はそれを認識していませんか?SQL 2005およびASP.NET2.0以降、この機能はすでに使用されています。EF 4/5はその重要な機能を見逃すことはできませんよね?この質問を手伝ってくれる専門家が必要です。

私はたまたまこのリンクからハックを見つけました:

http://www.codeproject.com/Articles/233770/AutoRefresh-Entity-Framework-data-using-SQL-Server

ただし、これは多かれ少なかれ「文書化されていない魔法」の方法であり、いくつかの未知の制限があります(そのページからの制限リンクが削除されたため、それらが何であるかはわかりません)。そのため、使用するのに十分な信頼性がなく、新しいEFパッチの後で突然機能しなくなっても驚かないでしょう。それを行うためのより「公式な」方法はありますか?ありがとう!

4

3 に答える 3

1

いくつかの未知の制限があります(そのページの制限リンクが削除されているので、それらが何であるかわかりません)

その壊れたリンクを修正しました。これは不思議なことではなく、 MSDNの記事「通知用のクエリの作成」へのリンクにすぎません。

于 2012-08-03T06:48:09.103 に答える
1

.Netは、必要なときにキャッシュを無効にする方法を提供します。製品マネージャーが更新を行うときにキャッシュを無効にするために使用する更新ページを設定できます。サービスブローカーを設定するよりも簡単かもしれません

于 2012-05-17T16:18:12.733 に答える
1

任意の LINQ クエリの SqlDependency を介したキャッシュを有効にするLinqToCacheを参照してください。EF に関して言えば、EF によって作成された SQL クエリがクエリ通知の制限に準拠しているかどうかが問題になります。前回チェックしたとき、EF はリクエストにサブクエリを無償で追加していたため、クエリが通知不能になっていました。最新の EF の方が優れていると聞いており、動作する可能性がありますが、自分でテストしていません。

于 2012-05-18T07:02:30.307 に答える