【问题标题】:Execute async non selectable stored procedure in EF Core 2.1在 EF Core 2.1 中执行异步不可选择的存储过程
【发布时间】:2019-01-10 23:25:47
【问题描述】:

我正在尝试在 EF Core 2.1 中执行异步不可选择的存储过程。

  return Ok(
              await db.Set()
              .FromSql($"EXECUTE PROCEDURE MY_PROC({id})")
              .ToListAsync());

错误

方法“DbContext.Set()”的类型参数无法从用法中推断出来。尝试明确指定类型参数

我也试过了:

return Ok(
             await db.MYDB
              .FromSql($"EXECUTE PROCEDURE MY_PROC({id})")              
             .ToListAsync());

错误

500(内部服务器错误)在控制台

然后我尝试创建一个静态方法:

public static async Task ExecSqlNonQuery(Entities db, string sql)
{
     using (var com = db.Database.GetDbConnection().CreateCommand())
     {
         com.CommandText = sql;
         com.CommandType = CommandType.StoredProcedure;
         db.Database.OpenConnection();
         await com.ExecuteNonQueryAsync();
     };
}
....
return Ok( await ExecSqlNonQuery(db,$"EXECUTE PROCEDURE MY_PROC({id})");   

但是使用这段代码,我得到:

参数 1:无法从 'void' 转换为 'object'

仅适用于非异步和老式方式:

public static  bool ExecSqlNonQuery(Entities db, string sql)
{
    try
    {
        using (var com = db.Database.GetDbConnection().CreateCommand())
        {
            com.CommandText = sql;
            com.CommandType = CommandType.StoredProcedure;

            db.Database.OpenConnection();
            com.ExecuteNonQuery();

            return true;
        };
    }
    catch (Exception)
    {
        return false;
    }
}
......
return Ok(ExecSqlNonQuery(db, $"EXECUTE PROCEDURE MY_PROC({id})"););

有什么帮助吗?谢谢

【问题讨论】:

  • 目标数据库类型是什么?
  • 火鸟 2.5.thanks

标签: asp.net-core entity-framework-core asp.net-core-2.0 asp.net-core-webapi entity-framework-core-2.1


【解决方案1】:

FromSql 方法用于记录集(查询)返回 SQL 命令。对于其他类型的命令,您应该使用一些 ExecuteSqlCommandExecuteSqlCommandAsync 方法重载。

对数据库执行给定的 SQL 并返回受影响的行数。

例如(假设 SQL 语法正确):

await db.Database.ExecuteSqlCommandAsync($"EXECUTE PROCEDURE MY_PROC({id})");
return Ok();

【讨论】:

    猜你喜欢
    • 2021-10-13
    • 1970-01-01
    • 2011-11-11
    • 1970-01-01
    • 2021-09-01
    • 2023-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多