在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命令的记录集(查询(。对于其他类型的命令,您应该使用一些ExecuteSqlCommandExecuteSqlCommandAsync方法重载。

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

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

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

最新更新