EF Core调用存储过程无执行无报错,请求排查问题
嘿,我碰到过好多次这种“代码跑了但没动静”的情况,咱们一步步来排查问题哈!
核心问题:用错了EF Core的执行方法
你现在用的FromSql是EF Core专门用来执行查询并返回实体集合的API,它的特性是延迟执行——也就是说,你只写了FromSql但没有触发枚举(比如调用ToList()、FirstOrDefault())的话,EF Core根本不会去数据库执行这条SQL!而你的存储过程AddRequest_To_TempRequest看起来是做插入操作的非查询逻辑,用FromSql完全不对路,这就是既无效果也无报错的根源。
正确的解决方式
对于插入、更新这类非查询的存储过程,应该用ExecuteSqlRaw或者ExecuteSqlInterpolated,这两个方法会立即执行SQL语句,并返回受影响的行数,方便你验证执行结果。给你调整后的代码:
TenandId = user.TenantId; userName = user.UserName; updateDate = DateTime.Now; TimeStart = 139601; TimeEnd = 139612; RequestId = id; // 用ExecuteSqlRaw执行非查询存储过程 var affectedRows = _context.Database.ExecuteSqlRaw( "EXEC dbo.AddRequest_To_TempRequest @TimeStart, @TimeEnd, @TenantId, @UpdateDate, @UserName, @RequestId", new SqlParameter("@TimeStart", TimeStart), new SqlParameter("@TimeEnd", TimeEnd), new SqlParameter("@TenantId", TenandId), new SqlParameter("@UpdateDate", updateDate), new SqlParameter("@UserName", userName), new SqlParameter("@RequestId", RequestId) ); // 可以打印受影响行数,确认是否执行成功 Console.WriteLine($"存储过程执行完成,受影响行数:{affectedRows}");
额外需要排查的潜在问题
除了方法用错,还有几个点可能导致静默失败:
- 参数顺序是否匹配:检查你的存储过程
AddRequest_To_TempRequest定义的参数顺序,是不是和你传入的顺序完全一致?如果顺序错了,可能会把值传到错误的参数上(比如把TenantId传给了UpdateDate),如果参数允许null或者类型兼容,数据库可能不会报错,但逻辑完全走偏了。 - 参数类型是否匹配:比如
TimeStart是整数,存储过程里对应的参数是不是也是int类型?UpdateDate是DateTime,存储过程里是不是datetime/datetime2类型?类型不匹配也可能导致数据库静默忽略操作。 - 事务未提交:如果你的代码包裹在事务里(比如用了
_context.Database.BeginTransaction()),记得最后要调用transaction.Commit(),否则事务会回滚,操作也不会生效。
补充:如果存储过程确实需要返回结果
要是你的存储过程本来就设计为返回数据,那用FromSql是可以的,但必须触发查询执行,比如加上ToList():
var results = _context.TempRequest.FromSql( "EXEC dbo.AddRequest_To_TempRequest @TimeStart, @TimeEnd, @TenantId, @UpdateDate, @UserName, @RequestId", new SqlParameter("@TimeStart", TimeStart), new SqlParameter("@TimeEnd", TimeEnd), new SqlParameter("@TenantId", TenandId), new SqlParameter("@UpdateDate", updateDate), new SqlParameter("@UserName", userName), new SqlParameter("@RequestId", RequestId) ).ToList(); // 必须加这个才会实际执行查询
但对于插入/更新类的操作,还是强烈推荐用ExecuteSqlRaw,更贴合非查询的场景。
内容的提问来源于stack exchange,提问作者Hafizullah Mahmudi
相关产品推荐
相关产品推荐

