2014-02-20 5 views
7

У меня есть хранимая процедура, как показано ниже, которая принимает 1 входной параметр (Имя) и возвращает 2 выходных параметра (EmployeeId и Salary). В нашей хранимой процедуре будет добавлено имя в таблицу Employee и вернуть нам EmployeeId и зарплату.Database.SqlQuery вызов хранимой процедуры с несколькими выходными параметрами

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

Мы используем первый подход EF Code. Я могу вставлять записи в таблицу employee и не могу найти способ доступа к моим двум выходным параметрам. Я знаю, что мне нужно использовать, как показано ниже. Может ли кто-нибудь сказать мне, что должно быть Результатом. Согласно 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

Смежные вопросы