存儲過程和實體框架存在問題。運行存儲過程時出現實體框架問題
讓我解釋發生了什麼......以及迄今爲止我所嘗試過的。
我有一個存儲過程,它不會做一個可怕的很多
SELECT
COUNT(DISTINCT(EmailAddress)) AcceptedQuotes,
CONVERT (DATE,QuoteDate) QuoteDate
FROM
Quote Q
JOIN
Person P on Q.PersonPk = P.Pk
JOIN
Product Pr on Q.ProductPk = Pr.Pk
JOIN
Accepted A on Q.Pk = A.QuotePk
WHERE
QuoteDate between @startDate and @endDate
AND CompanyPk = @companyPk
AND FirstName != 'Test'
AND FirstName != 'test'
AND FirstName != 'EOH'
我要執行此,它工作在SSMS罰款,甚至用不了1秒。
現在,我導入此在實體框架,它的時間了,我設置的命令超時120 ...
好了,所以我迄今嘗試過什麼,我已經測試。
如果我使用SqlCommand
,SqlDataAdapter
,DataTable
方式,用我自己的連接字符串,它按預期執行。當我在這種情況下使用實體框架連接字符串時,它超時。
我改變了我的存儲過程以包含「重新編譯」選項,並且嘗試了SET ARITHABORT
的方式,沒有運氣,它在超過EF時超時。
這是EF中的一個錯誤嗎?
我現在剛剛決定重寫這個使用「舊學校」數據訪問。
另請注意,EF可以在同一數據庫中與其他存儲過程一起使用。
任何想法或幫助將不勝感激...
PS。我發現這篇文章,但是沒有幫助或者:(
http://www.sommarskog.se/query-plan-mysteries.html
你可以嘗試更簡單的查詢沒有任何地方cluase,如選擇TOP 1,並看看你是否得到結果 –
你可以發佈你用來執行此查詢的代碼?另外,嘗試使用sql server profiler來查看底下發生了什麼。也許你在EF案例中傳遞了錯誤的參數值? –
好吧,我運行了分析器,EF正在查殺數據庫服務器。 ** CPU 3**,**讀取1364453 **這是什麼地獄,並且這被改爲不使用帶有參數的where子句,並且只能選擇前10個 – Kobie