【问题标题】:EF Core, how to call stored procedure with input and output params?EF Core,如何使用输入和输出参数调用存储过程?
【发布时间】:2016-12-16 21:35:58
【问题描述】:

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

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

但是,既然没有实体,我应该为“blah”输入什么,它只是一个布尔输出......我如何获得所说的输出?

编辑:这个问题并不能解决问题。

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);

【问题讨论】:

  • 不是有Database 对象脱离上下文吗?喜欢context.Database.SqlQuery("...");
  • @Jonesopolis -- 嗯......好吧,这可能会解决问题:),但是 out 参数呢?它似乎不像示例所示那样接受 SqlParameter 对象。
  • @Eris,你看到关于 OUT 参数的任何信息吗?
  • @SledgeHammer 第二个答案展示了如何根据 DBContext 信息创建标准 SQLCommand 对象,它允许您使用普通参数并设置 ParameterDirection.Output

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


【解决方案1】:

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

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());

【讨论】:

  • SP 正在使用 Set @exist = 1
  • 你确定你说的是EF CORE吗?他们在 Database 对象上没有 .SqlQuery。
猜你喜欢
  • 2023-03-12
  • 2020-02-13
  • 1970-01-01
  • 2017-09-23
  • 1970-01-01
  • 1970-01-01
  • 2018-08-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多