asp.net-core - 在 EF Core 2.1 中执行异步不可选择的存储过程
问题描述
我正在尝试在 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})"););
有什么帮助吗?谢谢
解决方案
FromSql
方法用于记录集(查询)返回 SQL 命令。对于其他类型的命令,您应该使用一些ExecuteSqlCommand
orExecuteSqlCommandAsync
方法重载。
对数据库执行给定的 SQL 并返回受影响的行数。
例如(假设 SQL 语法正确):
await db.Database.ExecuteSqlCommandAsync($"EXECUTE PROCEDURE MY_PROC({id})");
return Ok();
推荐阅读
- python - 将我的 Pycharm 文件转换为 exe Python3.8 [WINDOWS 10]
- javascript - 如何使用多个 session.setAttribute 从 sql 数据库中获取行值?
- laravel - Illuminate\Database\QueryException 请帮帮我
- javascript - 获取用户的匹配设备令牌并从解析中获取
- wordpress - 如何将 WordPress 与 HostGator 一起使用?
- ios - Firebase 身份验证将 Facebook 链接到 Google
- r - 将字符串转换为基础 R 中的公式对象
- python - 如何在python jupyter中删除csv中的行后重置R中的索引?
- arrays - Pascal - 如何从该类中的函数返回一个类的数组?
- c++ - 如何计算不规则多边形的角度?