2012-05-17 36 views
2

我想知道如何在EF4.x或EF5中使用SQL Service Broker?使用SQL Service Broker的實體框架

場景: 說,我有一個產品列表,我不希望每次客戶訪問該頁面時從db加載。當然,我可以緩存頁面,但是如果產品經理添加了新產品,它不會立即顯示,除非緩存已過期或查詢參數已更改。

解決方案: 在SQL中,我們可以在Enable_Broker和Web應用程序中啓動SqlDependency連接。 SQL將向我們的Web應用程序發送通知。因此,我們有一個聰明的'緩存'系統。 如果我們可以使用該智能緩存,這將是有意義的。當有1,000個客戶單擊該頁面時,我們不需要訪問SQL db 1000次。但是,一旦數據庫發生變化,當時訪問該頁面的第一位客戶將看到反思。我們得到兩全其美。

問題: 實體框架未公開此能力。或者我不知道它?由於SQL 2005和ASP.NET 2.0已經具備了這種能力。 EF 4/5不能錯過這個重要的功能,對吧?我需要一些專家來幫助我解決這個問題。

我偶然發現此鏈接黑客攻擊:

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

然而,這是或多或少的「無證神奇」的方式,它有一些未知的限制(限制鏈接從該頁面有被刪除,所以我不知道他們是什麼)。所以,我使用它並不夠可靠,如果在新的EF補丁後突然不起作用,我不會感到驚訝。有更多'官方'的方式來做到這一點嗎?謝謝!

回答

1

請參閱LinqToCache,它可以通過SqlDependency緩存任意LINQ查詢。說到EF,它是否由EF創建的SQL查詢符合查詢通知的限制。上次我檢查了EF是無故地在請求中添加一個子查詢,從而使查詢不可通知。我聽說最新的EF更好,它可能工作,但我沒有自己測試。

1

.Net提供了在需要時使緩存失效的方法,您可以設置產品管理器在更新時使緩存失效的更新頁面。可能比設立服務中介更容易

+0

你的意思是頁緩存的時間和參數?如果這就是你的意思,我已經在第一段中提到了它。這是一個.net 1.0的東西。我想從代理服務的智能更新通知,就像我可以使用普通的sql db + .net 2.0 web應用程序... – Tom

+1

我的意思是說,當您的更新頁面被使用時,您可以使頁面緩存無效。這就是緩存通常的工作原理。您不必等待N秒後無效緩存。 – bwbrowning

+1

嗯。產品經理很可能通過ssis或類似的東西將數據傳輸到sql db。他可能不會使用網絡應用來更新數千種產品的價格。在這種情況下,Web應用程序不知道在SQL DB上發生了什麼。另外,我們可能有多個應用程序訪問數據庫... – Tom