首页 文章

数据库操作预计会影响1行但实际影响0行

提问于
浏览
-1

我试图在两个表中插入记录,但获得异常 . 你能帮我解决一下这个问题吗?

首先,我尝试了下面的代码 .

await _testRepository.InsertAsync(test);
await _xyzRepository.InsertAsync(xyz);

然后我试了这个代码,但没有什么对我有用 .

try
{
   var test = new Test();

   using (var uow = _unitOfWorkManager.Begin(TransactionScopeOption.RequiresNew))
   {
      int? tenantId = _unitOfWorkManager.Current.GetTenantId();
      using (_unitOfWorkManager.Current.SetTenantId(tenantId))
      {
         await _testRepository.InsertAsync(test);

         var xyz = new XYZ();
         await _xyzRepository.InsertAsync(xyz);
         await _unitOfWorkManager.Current.SaveChangesAsync();
         await uow.CompleteAsync();
      }
   }
}
catch (Exception ex)
{
   throw new UserFriendlyException(ex.Message);
}

Exception

Message:

数据库操作预计会影响1行,但实际上影响了0行 . 自加载实体以来,数据可能已被修改或删除 . 有关理解和处理乐观并发异常的信息,请参阅http://go.microsoft.com/fwlink/?LinkId=527962 .

stack trace:

在Microsoft.EntityFrameworkCore.Update.AffectedCountModificationCommandBatch.d__4.MoveNext()中的Microsoft.EntityFrameworkCore.Update.AffectedCountModificationCommandBatch.ThrowAggregateUpdateConcurrencyException(Int32 commandIndex,Int32 expectedRowsAffected,Int32 rowsAffected) - 从抛出异常的上一个位置开始的堆栈跟踪结束 - - System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)at Microsoft.EntityFrameworkCore.Update.AffectedCountModificationCommandBatch.d__2.MoveNext()---堆栈跟踪结束抛出异常的先前位置---在Microsoft.EntityFrameworkCore.Update.ReaderModificationCommandBatch.d__32.MoveNext()的System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)的System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()处 - - 来自先前位置的堆栈跟踪结束e抛出xception ---在Microsoft.EntityFrameworkCore.Update.Internal.BatchExecutor.d__10.MoveNext()的System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)的System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()处 - - 抛出异常的先前位置的堆栈跟踪结束---在Microsoft.EntityFrameworkCore.Storage.Internal的System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)的System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()处 . SqlServerExecutionStrategy.d__7`2.MoveNext()---抛出异常的前一个位置的堆栈跟踪结束---在System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification的System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()处(任务) Microsoft.EntityFrameworkCore.ChangeTracking.Internal.StateManager.d__61.MoveNext()---来自先前位置的堆栈跟踪结束,其中异常是rown --- at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)at Microsoft.EntityFrameworkCore.ChangeTracking.Internal.StateManager.d__59.MoveNext()--- End抛出异常的前一个位置的堆栈跟踪---在Microsoft.EntityFrameworkCore.DbContext.d__48.MoveNext的System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)的System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()处)---在抛出异常的前一个位置的堆栈跟踪结束---在System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)的System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()处于Abp.EntityFrameworkCore.AbpDbContext d:\ Github \ aspnetboilerplate \ src \ Abp.EntityFrameworkCore \ EntityFrameworkCore \ AbpDbContext.cs:line 214 INFD 2018-04-11 13:59 .Mvc.Internal.ControllerActionInvoker - 使用参数执行操作方法MyCompany.MyProject.AdditionalMasterData.Tests.TestsAppService.CreateOrEdit(MyCompany.MyProject.Application)([CreateOrEditTestDto]) - ModelState是有效的WARN 2018-04-11 14:01:48,396 [4] Mvc.ExceptionHandling.AbpExceptionFilter - 数据库操作预计会影响1行,但实际上影响了0行 . 自加载实体以来,数据可能已被修改或删除 . 有关理解和处理乐观并发异常的信息,请参阅http://go.microsoft.com/fwlink/?LinkId=527962 . Abp.UI.UserFriendlyException:数据库操作预计会影响1行,但实际上影响了0行 . 自加载实体以来,数据可能已被修改或删除 . 有关理解和处理的信息,请参阅http://go.microsoft.com/fwlink/?LinkId=527962乐观并发异常 . 在MyCompany.MyProject.AdditionalMasterData.Tests.TestsAppService.d__7.MoveNext()在C:\ Repo \ MyProjectVenues \ aspnet-core \ src \ MyCompany.MyProject.Application \ AdditionalMasterData \ Tests \ TestsAppService.cs:第205行---结束来自抛出异常的先前位置的堆栈跟踪---在MyCompany.MyProject.AdditionalMasterData.Tests.TestsAppService的System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)的System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()处 . d__6.MoveNext()在C:\ Repo \ MyProjectVenues \ aspnet-core \ src \ MyCompany.MyProject.Application \ AdditionalMasterData \ Tests \ TestsAppService.cs:第170行---从引发异常的上一个位置开始的堆栈跟踪结束 - - System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.d__12.MoveNext()--- stack of end从抛出异常的先前位置追踪---在Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.d__10的System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)的System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()处 . MoveNext()---抛出异常的前一个位置的堆栈跟踪结束---在Microsoft的Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.Rethrow(ActionExecutedContext context)的System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()中.AspNetCore.Mvc.Internal.ControllerActionInvoker.Next(State&next,Scope&scope,Object&state,Boolean&isCompleted)at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.d__14.MoveNext()---从前一个位置开始的堆栈跟踪在TM的System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)的System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()处抛出异常crosoft.AspNetCore.Mvc.Internal.ResourceInvoker.d__23.MoveNext()

Update

我找到了这个问题的根本原因 .

所以基本上我在Entity2上有一个插入触发器,当我在这个触发器中评论查询然后它工作正常 .

此触发器中大约有10个查询,很难知道哪个查询导致了问题 . 那么请你告诉我如何调试这个触发器?

3 回答

  • 0

    除非您使用的是Microsoft.EntityFrameworkCore.Metadata.SqlServerValueGenerationStrategy.SequenceHiLo生成器,否则请确保在您的存储库函数InsertAsync中不调用AddAsync . 正如文档中所记录的那样 . AddAsync

  • 2

    我遇到了与SQLite数据库相同的问题,但更新而不是插入 . 调用SaveChangesAsync而不是SaveChanges是解决方案 .

  • 0

    我遇到了类似的问题 . 我使用EF Core . 对于我的代码,我得到了以下更改的帮助 .

    context.Entry(user).State = EntityState.Added; // added row
    this.context.Users.Add(user);
    this.context.SaveChanges();
    

    UPD: 抱歉,通过为User.Id添加Identity属性解决了问题

    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    

相关问题