我們的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功能,爲了得到它與存儲過程調用正常工作。
感謝您發佈此問題。 MSDN上的鏈接文章非常長。您可以發表一個完整的答案來解答您自己的問題,並且一步一步解釋如何解決問題?謝謝! – 2013-05-08 10:34:33
我必須承認自從我處理這個問題以來已經有一段時間了。 我很確定我所做的只是包裝盒中的包裝類,Andiih首先在他的迴應中進行了鏈接,然後按照修改後的問題對其進行了修改。 – Grubsnik 2013-05-13 13:53:12