我正在尝试在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:无法从“无效”转换为“对象”
仅适用于非异步和老式方式:
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})"););
有帮助吗?谢谢
答案 0 :(得分:2)
FromSql
方法用于返回SQL命令的记录集(查询)。对于其他类型的命令,应使用某些ExecuteSqlCommand
或ExecuteSqlCommandAsync
方法重载。
对数据库执行给定的SQL,并返回受影响的行数。
例如(假设SQL语法正确):
await db.Database.ExecuteSqlCommandAsync($"EXECUTE PROCEDURE MY_PROC({id})");
return Ok();