2011-06-14 16 views
4

我們的EF4 MVC解決方案存在一些性能問題。我們已經能夠跟蹤到ArithAbort在與數據庫的所有連接之前關閉,現在我們試圖強制它保持爲「開」。控制EF4中的ArithAbort

我們已經看了: How do you control the "SET" statements emitted by Linq to SQL

但好像EF4被重置每次查詢前連接,這樣將無法正常工作。

到目前爲止,我們已經嘗試過在給定查詢之前「設置ArithAbort」,但沒有運氣。我們也嘗試了很長的路要走,並建立了一個新的連接,但仍然沒有運氣。

所以,任何人都有一個線索,我們可以如何讓它設置它之前對數據庫進行任何linq查詢?

更改數據庫設置不是一個選項。

編輯: 每Andiihs建議我嘗試了包裝解決方案,並在下面的代碼行添加到EFCachingCommand類

protected override DbDataReader ExecuteDbDataReader(CommandBehavior behavior) 
    { 
     if (this.WrappedCommand.CommandType == System.Data.CommandType.Text) 
     { 
      this.WrappedCommand.CommandText = "set arithabort on; " + this.WrappedCommand.CommandText; 
     } 

這基本上確保了任何的LINQ SQL調用得到一套正確前綴聲明。

我也不得不加:

DbFunctionCommandTree functionTree = commandTree as DbFunctionCommandTree; 
    if (functionTree != null) 
    { 
     this.IsModification = true; 
     return; 
    } 

要在EFCachingCommandDefinition的GetAffectedEntitySets功能,爲了得到它與存儲過程調用正常工作。

+0

感謝您發佈此問題。 MSDN上的鏈接文章非常長。您可以發表一個完整的答案來解答您自己的問題,並且一步一步解釋如何解決問題?謝謝! – 2013-05-08 10:34:33

+0

我必須承認自從我處理這個問題以來已經有一段時間了。 我很確定我所做的只是包裝盒中的包裝類,Andiih首先在他的迴應中進行了鏈接,然後按照修改後的問題對其進行了修改。 – Grubsnik 2013-05-13 13:53:12

回答

4

EF提供插入實體連接和SQL.Data.Client之間的包裝供應商的能力 - 看到http://code.msdn.microsoft.com/EFProviderWrappershttp://blogs.msdn.com/b/jkowalski/archive/2009/06/11/tracing-and-caching-in-entity-framework-available-on-msdn-code-gallery.aspx

現在,我承認這更是一個比線索的答案 - 但也許你可以插入這一點有關嗎?

+0

似乎是一個非常好的起點。我會去挖掘,看看我能想出什麼。 – Grubsnik 2011-06-16 07:50:15

+0

它像一個魅力。感謝提示。 – Grubsnik 2011-06-16 13:19:36

+1

你能分享你想出來的嗎? – Andiih 2011-06-16 14:07:37