2

我有一个通过 DBContext 调用的存储过程,如下所示:

using (var transScope = new TransactionScope(TransactionScopeOption.Required, new TimeSpan(0)))
{
   using (var db = new IceCreamEntities(connectionString, null, null))
   {
      db.CallMyProc(dateTime);
      var num = db.SaveChanges();
   }
   transScope.Complete();
}

编辑:proc根据传入的日期时间值和数据库中已知的一些其他信息删除一些行。

proc 肯定有效 - 我的集成测试验证表在执行 proc 后具有正确的行数 - 但对于受影响的行数,我总是返回 0。

想法?

我正在运行:EF 4.3、MySQL 5.5.28、MySQL 连接器 6.5.4


已解决:请参阅下面的答案。

4

1 回答 1

0

解决了:

好吧,所以答案是忽略 db.SaveChanges() 的返回,而是使用调用过程本身返回的值。所以,现在看起来是这样的:

using (var transScope = new TransactionScope(TransactionScopeOption.Required, new TimeSpan(0)))
{
   using (var db = new IceCreamEntities(connectionString, null, null))
   {
      var num = db.CallMyProc(dateTime);  //<<<<<< set it here instead
      db.SaveChanges();
   }
   transScope.Complete();
}

我的测试中有一个错误使 db.CallMyProc 调用也返回 0,因此这掩盖了调用确实返回了受影响的行数的事实。

仍然不确定为什么 SaveChanges 没有,但无论如何。

于 2013-01-08T15:48:13.297 回答