I have a stored procedure like below which takes 1 input parameter ( Name ) and returns 2 output parameters( EmployeeId and Salary). Our stored procedure will insert Name into Employee table and give us back EmployeeId and Salary.
CREATE PROCEDURE dbo.insertemployee
@iName varchar(500),
@OEmployeeId int OUTPUT,
@OSalary Money OUTPUT
We are using EF Code First approach. I am able to insert records into employee table and cannot find how I can access my two output parameters. I know that I need to use like below. Can anybody tell me what must be Result. According to MSDN, it can be a class that has column names as properties. But my case is that we are not returning columns of my table but we are using two output parameters and I need know how to access those two output parameters @OEmployeeId and @OSalary.
context.Database.SqlQuery<Result>(" exec dbo.insertemployee....);
public class Result
{
// what properties I must give here
}
The method you are trying to use only works for results of a query. It can't put the values of the output parameters into a new object for you automatically.
You have to create the parameters explicitly and read their values after the stored procedure has been run.
So if you have a stored procedure like this:
CREATE PROCEDURE dbo.insertemployee
(
@iName varchar(500),
@OEmployeeId int OUTPUT,
@OSalary Money OUTPUT
)
AS
BEGIN
SELECT @OEmployeeId = 1337;
SELECT @OSalary = 1000;
END
... you can execute it and get the results of the parameters like this:
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;
}