Ich habe ein Problem mit gespeicherten Prozeduren und Entity Framework.Entity Framework Problem beim Ausführen gespeicherter Prozeduren
Lassen Sie mich erklären, was passiert ... und was ich bisher versucht habe.
Ich habe eine gespeicherte Prozedur, die nicht sehr viel
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'
ich dies ausführen möchten nicht tun, und es funktioniert in SSMS in Ordnung und nicht einmal 1 Sekunde.
Nun, ich importieren diese in zu Entity Framework, es mal aus und ich den Befehl Timeout auf 120 ...
Ok, so was habe ich bisher versucht, und was ich getestet habe.
Wenn ich SqlCommand
, SqlDataAdapter
, DataTable
Weise, mit meiner eigenen Verbindungszeichenfolge, wird es wie erwartet ausgeführt. Wenn ich in diesem Szenario die Verbindungszeichenfolge von Entity Framework verwende, wird das Zeitlimit überschritten.
Ich änderte meine gespeicherte Prozedur um "Recompile" -Option und versuchte auch die SET ARITHABORT
Art und Weise, kein Glück, es Timeout, wenn Sie durch die EF laufen.
Ist das ein Fehler in EF?
Ich habe jetzt gerade beschlossen, dies neu zu schreiben mit "Old School" Datenzugriff.
Beachten Sie auch, dass die EF mit anderen gespeicherten Procs aus derselben Datenbank einwandfrei ausgeführt wird.
Irgendwelche Ideen oder Hilfe sehr dankbar ...
PS würde. Ich diesen Artikel gefunden, aber keine Hilfe entweder :(
http://www.sommarskog.se/query-plan-mysteries.html
Können Sie viel einfachere Abfrage ohne irgendwelche wo cluase, wie wählen Sie TOP 1, und sehen, ob Sie Ergebnis erhalten –
Könnten Sie den Code, den Sie verwenden, um diese Abfrage ausführen? Versuchen Sie auch, sql Server Profiler zu verwenden, um zu sehen, was unter der Haube geschieht. Vielleicht übergeben Sie den falschen Wert für die Parameter im EF-Fall? –
Nun, ich habe den Profiler ausgeführt, und EF tötet den DB-Server. ** CPU 3**, ** liest 1364453 ** was zum Teufel, und das wurde geändert, um keine where-Klausel mit Parametern zu verwenden, und nur Top 10 auswählen – Kobie