Entity Framework Problem Beim Ausführen von Stored Procedures

8

Ich habe ein Problem mit gespeicherten Prozeduren und Entity Framework.

Lass mich erklären, was passiert ... und was ich bisher versucht habe.

Ich habe eine gespeicherte Prozedur, die nicht viel tut

%Vor%

Ich möchte dies ausführen, und es funktioniert gut in SSMS und dauert nicht einmal 1 Sekunde.

Nun importiere ich das in Entity Framework, es läuft ab und ich setze den Befehl timeout auf 120 ...

Ok so was habe ich bisher ausprobiert und was ich getestet habe.

Wenn ich SqlCommand , SqlDataAdapter , DataTable way mit meiner eigenen Verbindungszeichenfolge verwende, wird es wie erwartet ausgeführt. Wenn ich in diesem Szenario die Verbindungszeichenfolge von Entity Framework verwende, wird das Zeitlimit überschritten.

Ich habe meine gespeicherte Prozedur so geändert, dass sie die Option "Neu kompilieren" enthält, und habe auch den SET ARITHABORT -Weg versucht, kein Glück, es läuft ab, wenn man durch die EF läuft.

Ist das ein Fehler in EF?

Ich habe mich jetzt gerade dazu entschlossen, dies unter Verwendung des "Old School" -Datenzugriffs neu zu schreiben.

Beachten Sie auch, dass die EF mit anderen gespeicherten Prozeduren aus derselben Datenbank ausgeführt werden kann.

Irgendwelche Ideen oder Hilfe würden sehr geschätzt ...

PS. Ich habe diesen Artikel gefunden, aber auch keine Hilfe: (

Ссылка

    
Kobie 07.05.2015, 06:19
quelle

1 Antwort

1

Dies kann verursacht werden durch Parameter Sniffing

Wenn eine gespeicherte Prozedur kompiliert oder neu kompiliert wird, werden die Parameterwerte, die für diesen Aufruf übergeben werden, "geschnüffelt" und für die Kardinalitätsschätzung verwendet. Der Nettoeffekt ist, dass der Plan so optimiert wird, als ob diese spezifischen Parameterwerte als Literale in der Abfrage verwendet würden.

  
  1. Die Verwendung von Dummy-Variablen, die nicht direkt in Parametern angezeigt werden, stellen auch die Stabilität des Ausführungsplans sicher, ohne dass eine Neukompilierung erforderlich ist   Hinweis, Beispiel unten:
  2.   

create procedure dbo.SearchProducts       @Keyword varchar (100) Als Declare @Keyworddummy as varchar (100) Setze @Keyworddummy = @Keyword wähle * aus Products where Keyword like   @Keyworddummy

     
  1. Um dies und andere ähnliche Situationen zu vermeiden, können Sie die folgende Abfrageoption verwenden:
  2.   

OPTIMIZE FÜR RECOMPILE

     
  1. Deaktivieren Sie die automatische Update-Statistik während des Stapels
  2.   
    
Hussein Khalil 17.05.2015 11:23
quelle