2014-02-20 4 views
7

Ich habe eine gespeicherte Prozedur wie folgt, die 1 Eingabeparameter (Name) dauert und 2 Ausgabeparameter (EmployeeId und Gehalt) zurückgibt. Unsere gespeicherte Prozedur wird Name in Employee-Tabelle einfügen und uns EmployeeId und Salary zurückgeben.Database.SqlQuery gespeicherte Prozedur aufrufen, die mehrere Ausgabeparameter hat

CREATE PROCEDURE dbo.insertemployee 
@iName varchar(500), 
@OEmployeeId int OUTPUT, 
@OSalary Money OUTPUT 

Wir verwenden EF Code First Ansatz. Ich bin in der Lage, Datensätze in Mitarbeitertabelle einzufügen und kann nicht finden, wie ich auf meine zwei Ausgabeparameter zugreifen kann. Ich weiß, dass ich wie folgt verwenden muss. Kann mir jemand sagen, was Ergebnis sein muss. Laut MSDN kann es eine Klasse sein, die Spaltennamen als Eigenschaften hat. Aber mein Fall ist, dass wir keine Spalten meiner Tabelle zurückgeben, sondern dass wir zwei Ausgabeparameter verwenden und ich weiß, wie ich auf diese beiden Ausgabeparameter @OEmployeeId und @OSalary zugreifen kann.

context.Database.SqlQuery<Result>(" exec dbo.insertemployee....); 

public class Result 
{ 
    // what properties I must give here  
} 

Antwort

20

Die Methode, die Sie verwenden möchten, funktioniert nur für Ergebnisse einer Abfrage. Es kann die Werte der Ausgabeparameter für Sie nicht automatisch in ein neues Objekt einfügen.

Sie müssen die Parameter explizit erstellen und ihre Werte lesen, nachdem die gespeicherte Prozedur ausgeführt wurde.

Also, wenn Sie eine gespeicherte Prozedur wie folgt aus:

CREATE PROCEDURE dbo.insertemployee 
(
    @iName varchar(500), 
    @OEmployeeId int OUTPUT, 
    @OSalary Money OUTPUT 
) 
AS 
BEGIN 
    SELECT @OEmployeeId = 1337; 
    SELECT @OSalary = 1000; 
END 

... Sie können es ausführen und die Ergebnisse der Parameter wie diese:

using (var ctx = new Context()) 
{ 
    var nameParam = new SqlParameter("iName", "TestName"); 

    var employeeIdParam = new SqlParameter("OEmployeeId", SqlDbType.Int) 
    { 
     Direction = System.Data.ParameterDirection.Output 
    }; 

    var salaryParam = new SqlParameter("OSalary", SqlDbType.Money) 
    { 
     Direction = System.Data.ParameterDirection.Output 
    }; 

    ctx.Database.ExecuteSqlCommand(
     "insertemployee @iName, @OEmployeeId out, @OSalary out", 
     nameParam, employeeIdParam, salaryParam); 

    var employeeId = (int)employeeIdParam.Value; 
    var salary = (decimal)salaryParam.Value; 
} 
+0

Vielen Dank Peter Hansen . Das hat mein Problem gelöst. Es war wirklich schwer für mich, irgendwelche Posts und Blogs zu finden, die eine gespeicherte Prozedur aufrufen, deren Ausgabeparameter EF Code First verwendet. – Ziggler

Verwandte Themen