EF Core,如何使用输入和输出参数调用存储过程?

时间:2016-12-16 21:35:59

标签: c# stored-procedures entity-framework-core

在EF Core中,使用dbContext,如何使用输入和输出参数调用存储过程?我知道基本的gyst是:

Set<blah>.FromSql("storedProcName @p0 = {0}, @p1 = {1}", p0, p1);

但是,由于没有实体,我只能选择“blah”,它只是一个bool输出......我怎么得到所说的输出?

编辑:这个问题没有解决问题。

DAMN ......最终让它正常工作......您必须使用大括号语法并在最后一个参数上添加OUTPUT关键字。

SqlParameter paramOut = new SqlParameter("@p5", SqlDbType.Bit) { Direction = ParameterDirection.Output };

        this.Database.ExecuteSqlCommand("exec usp_xxx @p1={0}, @p2={1}, @p3={2}, @p4={3}, @p5={4}, @exist={5} OUTPUT",
            p1, p2, p3, p4, p5, paramOut);

1 个答案:

答案 0 :(得分:0)

您可以编写一个实用程序方法,如:

private static int ExecuteSqlCount(string statement, SqlParameter[] paramsSql)
{
    using (Entities dbContext = new Entities())
    {
        var total = dbContext.Database.SqlQuery<int>(statement, paramsSql).First();
        return total;
        }
    }
}

假设存储过程采用如图所示的两个参数并返回一个整数,它将被称为:

var parameters = new List<SqlParameter>();
string statement = "exec uspPersonAdd @personName = @name, @activeFlag = @active";
parameters.Add(new SqlParameter("@name", person.PersonName));
parameters.Add(new SqlParameter("@active", person.Active));
int id = ExecuteSqlCount(statement, parameters.ToArray());