我正在爲WinForms應用程序編寫查詢管理器,其中包括需要能夠在用戶輸入查詢時向用戶提供實時搜索結果的過程(想想谷歌的實時結果,儘管顯然是在一個厚厚的客戶端環境中而不是網絡上)。由於結果需要在用戶鍵入時開始到達,因此搜索將變得越來越具體,因此如果在用戶輸入更具體的信息時仍然執行查詢,我希望能夠取消查詢(因爲結果會無論如何,簡單地被丟棄)。取消實體框架查詢
如果這是普通的ADO.NET,我當然可以使用DbCommand.Cancel
函數並完成它,但我們使用EF4來訪問數據,並且似乎沒有一種明顯的方法可以取消查詢。另外,在Reflector中打開System.Data.Entity並查看EntityCommand.Cancel
可以看到一個令人沮喪的空方法體,儘管docs聲稱調用它會將它傳遞給provider命令的相應的Cancel
函數。
我已經考慮過簡單地讓現有的查詢運行並且啓動一個新的上下文來執行新的搜索(並且只是在它完成時丟棄現有的查詢),但是我不喜歡單個客戶端的想法當我只對最近的結果感興趣時,運行並行查詢的多個開放數據庫連接。
所有這些讓我相信,一旦將EF查詢分派到數據庫後根本無法取消EF查詢,但我希望這裏的某個人能夠指出我忽略的一些內容。
TL/DR版本:是否可以取消當前正在執行的EF4查詢?
我問的問題關於MSDN論壇這個問題:http://social.msdn.microsoft.com/Forums/en-US/adodotnetentityframework/thread/ d5ea8036-73e5-4566-9407-fa7a6a5fca3c這個原始問題是關聯的。希望MS的某個人能夠提供另一種解決方案。 – 2011-03-01 12:23:23