我试图在两个表中插入记录,但获得异常 . 你能帮我解决一下这个问题吗?
首先,我尝试了下面的代码 .
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 回答
除非您使用的是Microsoft.EntityFrameworkCore.Metadata.SqlServerValueGenerationStrategy.SequenceHiLo生成器,否则请确保在您的存储库函数InsertAsync中不调用AddAsync . 正如文档中所记录的那样 . AddAsync
我遇到了与SQLite数据库相同的问题,但更新而不是插入 . 调用SaveChangesAsync而不是SaveChanges是解决方案 .
我遇到了类似的问题 . 我使用EF Core . 对于我的代码,我得到了以下更改的帮助 .
UPD: 抱歉,通过为User.Id添加Identity属性解决了问题