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

viv*_*una 5 c# ef-code-first entity-framework-core asp.net-core aspnetboilerplate

我试图在两个表中插入记录,但出现异常。您能帮我解决问题吗?

首先,我尝试了以下代码。

await _testRepository.InsertAsync(test);
await _xyzRepository.InsertAsync(xyz);
Run Code Online (Sandbox Code Playgroud)

然后我尝试了这段代码,但是没有任何工作对我有用。

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);
}
Run Code Online (Sandbox Code Playgroud)

例外

信息:

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

堆栈跟踪:

Microsoft.EntityFrameworkCore.Update.AffectedCountModificationCommandBatch.d__4.MoveNext()---从发生异常的上一位置开始的堆栈跟踪结束-在System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)在System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()在Microsoft.EntityFrameworkCore.Update.AffectedCountModificationCommandBatch.d__2.MoveNext()-从上一个堆栈结束跟踪引发异常的位置---在System.Runtime.CompilerServices.TaskAwaiter的System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()处。Microsoft.EntityFrameworkCore.Update.ReaderModificationCommandBatch.d__32.MoveNext()上的HandleNonSuccessAndDebuggerNotification(任务任务)---从上一个引发异常的位置开始的堆栈跟踪结束-在System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() Microsoft.EntityFrameworkCore.Update.Internal.BatchExecutor.d__10.MoveNext()处的.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)---从上次引发异常的位置开始的堆栈跟踪---在System.Runtime。 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)上的ExceptionServices.ExceptionDispatchInfo.Throw()在Microsoft.EntityFrameworkCore.Storage.Internal.SqlServerExecutionStrategy.d__7` 2。MoveNext()-从上一个引发异常的位置开始的堆栈跟踪--在System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)在System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()在Microsoft.EntityFrameworkCore .ChangeTracking.Internal.StateManager.d__61.MoveNext()---从上一个引发异常的位置开始的堆栈结束跟踪---位于System.Runtime.CompilerServices.TaskAwaiter的System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()处。 Microsoft.EntityFrameworkCore.ChangeTracking.Internal.StateManager.d__59.MoveNext()上的HandleNonSuccessAndDebuggerNotification(任务任务)-从上一个引发异常的位置开始的堆栈结束跟踪--在System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()在System.Runtime上。Microsoft.EntityFrameworkCore.DbContext.d__48.MoveNext()处的CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)-从上次引发异常的位置开始的堆栈跟踪-在System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()在D. \ Github \ aspnetboilerplate \ src \ Abp.EntityFrameworkCore \ EntityFrameworkCore \ AbpDbContext.cs:line在D:\ Github \ aspnetboilerplate \ src \ Abp。D:\ Github \ aspnetboilerplate \ src \ Abp.EntityFrameworkCore \ EntityFrameworkCore \ AbpDbContext.cs:line 214中的D:\ Github \ aspnetboilerplate \ src \ Abp。D:\ Github \ aspnetboilerplate \ src \ Abp.EntityFrameworkCore \ EntityFrameworkCore \ AbpDbContext.cs:line 214中的D:\ Github \ aspnetboilerplate \ src \ Abp。

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有关了解和处理乐观并发异常的信息。在C:\ Repo \ MyProjectVenues \ aspnet-core \ src \ MyCompany.MyProject.Application \ AdditionalMasterData \ Tests \ TestsAppService.cs:Line 205的MyCompany.MyProject.AdditionalMasterData.Tests.TestsAppService.d__7.MoveNext()从上一个引发异常的位置开始的堆栈跟踪记录--- MyCompany.MyProject.AdditionalMasterData.Tests.TestsAppService的System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)处的System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() C:\ Repo \ MyProjectVenues \ aspnet-core \ src \ MyCompany.MyProject.Application \ AdditionalMasterData \ Tests \ TestsAppService.cs中的d__6.MoveNext():

更新资料

我有这个问题的根本原因。

所以基本上我在Entity2上有一个插入触发器,当我在该触发器中注释了查询后,它就可以正常工作了。

此触发器中大约有10个查询,很难知道是哪个引起了问题。所以,请您让我知道如何调试此触发器?

SVP*_*pov 11

我有一个类似的问题。我使用了 EF Core。我的代码的以下更改对我有所帮助。

context.Entry(user).State = EntityState.Added; // added row
this.context.Users.Add(user);
this.context.SaveChanges();
Run Code Online (Sandbox Code Playgroud)

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

    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
Run Code Online (Sandbox Code Playgroud)


Rob*_*oud 9

确保在您的存储库函数 InsertAsync 中,除非您使用 Microsoft.EntityFrameworkCore.Metadata.SqlServerValueGenerationStrategy.SequenceHiLo 生成器,否则您不会调用 AddAsync。如文档中所述。添加异步


Mou*_*mit 9

我的代码的问题是,我正在设置primary key value for tables explicitlynot db generatedefcore不知道这一点..所以最后我需要写(ValueGenerateNever

        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            base.OnModelCreating(modelBuilder);

            //TODO: on add any entity add here the same
            modelBuilder.Entity<AdminUser>().Property(e => e.AdminUserId).ValueGeneratedNever();
            modelBuilder.Entity<AdminUserLogInLog>().Property(e => e.AdminUserLogInLogId).ValueGeneratedNever();
            ...........
         }
Run Code Online (Sandbox Code Playgroud)

所有表的通用方法

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder);
        
        foreach (var item in modelBuilder.Model.GetEntityTypes())
        {
            var p = item.FindPrimaryKey().Properties.FirstOrDefault(i=>i.ValueGenerated!=Microsoft.EntityFrameworkCore.Metadata.ValueGenerated.Never);
            if (p!=null)
            {
                p.ValueGenerated = Microsoft.EntityFrameworkCore.Metadata.ValueGenerated.Never;
            }

        }
    }
Run Code Online (Sandbox Code Playgroud)


Vah*_*hir 8

就我而言,当我尝试将数据库中不存在的实体传递给Update()方法时,导致了问题。