我正在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
或ExecuteSqlCommandAsync
方法重载。
对数据库执行给定的SQL并返回受影响的行数。
例如(假设SQL语法正确(:
await db.Database.ExecuteSqlCommandAsync($"EXECUTE PROCEDURE MY_PROC({id})");
return Ok();