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

问题描述 投票:-1回答:3

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

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

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);
}

例外

信息:

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

堆栈跟踪:

at Microsoft.EntityFrameworkCore.Update.AffectedCountModificationCommandBatch.ThrowAggregateUpdateConcurrencyException(Int32 commandIndex,Int32 expectedRowsAffected,Int32 rowsAffected)at Microsoft.EntityFrameworkCore.Update.AffectedCountModificationCommandBatch.d__4.MoveNext()---从抛出异常的上一个位置开始的堆栈跟踪结束 - - 在System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()处于System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务),位于Microsoft.EntityFrameworkCore.Update.AffectedCountModificationCommandBatch.d__2.MoveNext()---来自之前的堆栈跟踪结束抛出异常的位置---在Microsoft.EntityFrameworkCore.Update.ReaderModificationCommandBatch.d__32.MoveNext()的System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)的System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()处 - - 来自先前位置的堆栈跟踪结束抛出eption ---在System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()处于System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务),位于Microsoft.EntityFrameworkCore.Update.Internal.BatchExecutor.d__10.MoveNext() - - 抛出异常的先前位置的堆栈跟踪结束---在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()---来自先前位置的堆栈跟踪结束,其中异常是thro wn --- 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__49.MoveNext()在D:\ Github \ aspnetboilerplate \ src \ Abp.EntityFrameworkCore \ EntityFrameworkCore \ AbpDbContext.cs:第214行

INFO 2018-04-11 13:59:53,439 [3] ore.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()

更新

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

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

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

c# asp.net-core ef-code-first entity-framework-core aspnetboilerplate
3个回答
2
投票

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


0
投票

我遇到了与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)]
© www.soinside.com 2019 - 2024. All rights reserved.