2014-02-20 4 views
7

하나의 입력 매개 변수 (Name)를 사용하고 2 개의 출력 매개 변수 (EmployeeId 및 Salary)를 반환하는 아래와 같은 저장 프로 시저가 있습니다. 우리의 저장 프로 시저는 Name을 Employee 테이블에 삽입하고 우리에게 EmployeeId 및 Salary를 돌려줍니다.Database.SqlQuery 여러 출력 매개 변수가있는 저장 프로 시저 호출

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

우리는 EF 코드 우선 접근법을 사용하고 있습니다. 직원 테이블에 레코드를 삽입 할 수 있으며 두 개의 출력 매개 변수에 액세스하는 방법을 찾을 수 없습니다. 나는 아래처럼 사용할 필요가 있음을 안다. 아무도 나에게 결과가 무엇인지 말해 줄 수 없나요? MSDN에 따르면, 속성으로 열 이름을 가진 클래스가 될 수 있습니다. 하지만 내 경우에는 테이블의 열을 반환하지 않지만 두 개의 출력 매개 변수를 사용하고 있으며이 두 출력 매개 변수 @OEmployeeId 및 @OSalary에 액세스하는 방법을 알아야합니다.

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

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

답변

20

만 사용하려고하는 방법은 쿼리의 결과를 사용할 수 있습니다. 출력 매개 변수의 값을 자동으로 새 오브젝트에 넣을 수는 없습니다.

매개 변수를 명시 적으로 만들고 저장 프로 시저를 실행 한 후에 값을 읽어야합니다.

그래서 당신은이 같은 저장 프로 시저가있는 경우 :

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

... 당신이 그것을 실행하고이 같은 매개 변수의 결과를 얻을 수 있습니다 :

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

가 대단히 피터 한센 감사를 . 이게 내 문제를 해결했습니다. EF Code First를 사용하여 출력 매개 변수가있는 저장 프로 시저를 호출하는 문제에 관한 게시물과 블로그를 찾아내는 것은 정말 어렵습니다. – Ziggler

관련 문제