2012-10-23 7 views
9

Ich versuche SQL Server benannte Parameter mit ObjectContext.ExecuteStoreQuery und ObjectContext.ExecuteStoreCommand zu verwenden, wenn eine gespeicherte Prozedur oder eine Funktion direkt aufgerufen wird.Benannte SQL Server-Parameter mit ExecuteStoreQuery und ExecuteStoreCommand

SQL Server benannte Parameter sind nicht das gleiche mit den Entity Framework benannte Parameter - sie mir erlauben, eine Abfrage auszuführen ähnlich mit dieser:

EXEC sp_GetData @firstParameter = 1, @thirdParameter = 2, @secondParameter = 1 

Die Reihenfolge der Parameter in dieser Abfrage spielt keine Rolle, entgegengesetzt zu Entity Framework benannte Parameter, die der Reihe nach ausgewertet werden.

Ich möchte benannte SQL Server-Parameter mit Entity Framework verwenden, damit, wenn die Reihenfolge der Parameter in der gespeicherten Prozedur geändert wird, der Entity Framework-Code, der sie aufruft, nicht betroffen ist.

Antwort

15

Damit dies wie erwartet funktioniert, müssen Sie den Abfragetext als parametrisierte Abfrage einrichten. Der schwierige Teil ist, dass Sie müssen nur sicherstellen, dass sich Ihre Parameter anders als die SP-Parameter genannt:

var cmdText = "[DoStuff] @Name = @name_param, @Age = @age_param"; 
var @params = new[]{ 
    new SqlParameter("name_param", "Josh"), 
    new SqlParameter("age_param", 45) 
}; 

ObjectContext.ExecuteStoreQuery<MyObject>(cmdText, @params); 
+0

Ich fühlte mich glücklich, nachdem ich Ihre Antwort gefunden hatte und es wirkte wie ein Zauber. – Signcodeindie

+0

dies erfordert mehr Traktion ... es ist der beste Weg, um mit dem Aufruf eines SP umzugehen, ohne auf die Reihenfolge der Parameter im SP angewiesen zu sein – mmcrae

4

FYI - nicht Ihre gespeicherten Prozeduren Namen mit sp_ zu starten, wie das ist, wie System-gespeicherte Prozeduren genannt werden. Das Ergebnis ist, dass der SQL-Server zuerst alle Systemprozeduren durchsucht, bevor er Ihre Definition findet, und in der Produktion mit vielen gespeicherten Procs und Aufrufen langsamer erscheint.

Verwandte Themen