web-dev-qa-db-ja.com

1行に影響することが予想されるが、実際には0行に影響するデータベース操作

2つのテーブルにレコードを挿入しようとしていますが、例外が発生します。問題の解決を手伝っていただけませんか。

まず、以下のコードを試してみました。

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 を参照してください。

スタックトレース:

microsoft.EntityFrameworkCore.Update.AffectedCountModificationCommandBatch.ThrowAggregateUpdateConcurrencyException(Int32 commandIndex、Int32 expectedRowsAffected、Int32 rowsAffected)at Microsoft.EntityFrameworkCore.Update.AffectedCountModificationCommandBatch.d__4.MoveNext()以前の場所-例外のスタックがスローされました-System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)at Microsoft.EntityFrameworkCore.Update.AffectedCountModificationCommandBatch.d__2.MoveNext()---前のスタックトレースの終わり例外がスローされた場所--- at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)at Microsoft.EntityFrameworkCore.Update.ReaderModificationCommandBatch.d__32.MoveNext()- -以前の場所からのスタックトレースの終わりeptionがスローされました--- at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)at Microsoft.EntityFrameworkCore.Update.Internal.BatchExecutor.d__10.MoveNext()- -例外がスローされた以前の場所からのスタックトレースの終わり--- System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)at Microsoft.EntityFrameworkCore.Storage.Internal。 SqlServerExecutionStrategy.d__7`2.MoveNext()---例外がスローされた前の場所からのスタックトレースの終了--- System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)at Microsoft.EntityFrameworkCore.ChangeTracking.Internal.StateManager.d__61.MoveNext()---例外がスローされた前の場所からのスタックトレースの終わり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例外がスローされた以前の場所からのスタックトレースの例-System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)at Microsoft.EntityFrameworkCore.DbContext.d__48.MoveNext( )---例外がスローされた前の場所からのスタックトレースの終わり--- at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)at Abp.EntityFrameworkCore.AbpDbContext .d__49.MoveNext()in D:\ Github\aspnetboilerplate\src\Abp.EntityFrameworkCore\EntityFrameworkCore\AbpDbContext.cs:line 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:line 205 --- End例外がスローされた以前の場所からのスタックトレースの----- System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)at MyCompany.MyProject.AdditionalMasterData.Tests.TestsAppService。 C:\ Repo\MyProjectVenues\aspnet-core\src\MyCompany.MyProject.Application\AdditionalMasterData\Tests\TestsAppService.cs:line 170のd__6.MoveNext()---例外がスローされた前の場所からのスタックトレースの終わり- -System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.d__12.MoveNext()---スタックの終わり例外がスローされた以前の場所からのトレース--- System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.d__10。 MoveNext()---例外がスローされた前の場所からのスタックトレースの終わり--- System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.Rethrow(ActionExecutedContext context)at Microsoft .AspNetCore.Mvc.Internal.ControllerActionInvoker.Next(State&next、Scope&scope、Object&state、Boolean&isCompleted)at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.d__14.MoveNext()---前の場所からのスタックトレースの終わり例外がスローされました--- System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)でSystem.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()でMiでcrosoft.AspNetCore.Mvc.Internal.ResourceInvoker.d__23.MoveNext()

更新

問題の根本的な原因がわかりました。

したがって、基本的にはEntity2に挿入トリガーがあり、このトリガー内のクエリにコメントすると、正常に機能します。

このトリガーには約10のクエリがあり、どのクエリが問題を引き起こしているかを知るのは非常に困難です。このトリガーのデバッグ方法を教えていただけませんか?

6
vivek nuna

リポジトリ関数InsertAsyncで、Microsoft.EntityFrameworkCore.Metadata.SqlServerValueGenerationStrategy.SequenceHiLoジェネレーターを使用していない限り、AddAsyncを呼び出さないようにしてください。ドキュメントに記載されています。 AddAsync

4
Robert Raboud

SQLiteデータベースでも同じ問題が発生しましたが、挿入ではなく更新が行われました。 SaveChangesの代わりにSaveChangesAsyncを呼び出すことが解決策でした。

1
pmichelbrink

私の場合、データベースに存在しないエンティティをpdate()メソッドに渡そうとしたときに発生した問題です。

0
VahidShir

同様の問題がありました。 EF Coreを使用しました。次のコードの変更に助けられました。

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

PD:申し訳ありませんが、User.IdのIdentity属性を追加することで問題は解決しました

    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
0
user2463841