web-dev-qa-db-fra.com

L'opération de base de données devrait affecter 1 ligne (s) mais a réellement affecté 0 ligne (s)

J'essaie d'insérer des enregistrements dans deux tables, mais j'obtiens l'exception. Pourriez-vous s'il vous plaît m'aider à résoudre le problème.

J'ai d'abord essayé le code ci-dessous.

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

Ensuite, j'ai essayé ce code, mais rien ne fonctionne pour moi.

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:

L'opération de la base de données devrait affecter 1 ligne (s), mais elle a en fait affecté 0 ligne (s). Les données peuvent avoir été modifiées ou supprimées depuis le chargement des entités. Voir http://go.Microsoft.com/fwlink/?LinkId=527962 pour plus d'informations sur la compréhension et la gestion des exceptions de concurrence optimiste.

trace de pile:

sur Microsoft.EntityFrameworkCore.Update.AffectedCountModificationCommandBatch.ThrowAggregateUpdateConcurrencyException (Int32 commandIndex, Int32 expectedRowsAffected, Int32 rowAffected) sur Microsoft.EntityFrameworkCore.Update.AffectedCountModification_proc_MatchDown_ObjectDownload_OnFaceDownloadObject ofConfiguration de fonction - sur System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () sur System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (Task task) sur Microsoft.EntityFrameworkCore.Update.AffectedCountModificationCommandCacheModificationCommandConfiguration_Command_Demove_Configuration_Configuration de la fonction emplacement où une exception a été levée --- sur System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () sur System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (tâche) sur Microsoft.EntityFrameworkCore.Update.ReaderModification (CommeadModification) - Trace de fin de pile de l'emplacement précédent où exc eption a été levée --- sur System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () sur System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (tâche) sur Microsoft.EntityFrameworkCore.Update.Internal.BatchExecut - Trace de fin de pile à partir de l'emplacement précédent où l'exception a été levée --- sur System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () sur System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (Task task) sur Microsoft.EntityFrameworkCore.Storage.Storage. SqlServerExecutionStrategy.d__7`2.MoveNext () --- Fin de la trace de la pile à partir de l'emplacement précédent où l'exception a été levée --- sur System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () sur System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebugger (tâche) sur Microsoft.EntityFrameworkCore.ChangeTracking.Internal.StateManager.d__61.MoveNext () --- Fin de la trace de la pile à partir de l'emplacement précédent où l'exception se produisait wn --- sur System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () sur System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (tâche) sur Microsoft.EntityFrameworkCore.ChangeTracking.Internal.StateManager.DateManager. de la trace de pile de l'emplacement précédent où l'exception a été levée --- à System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () à System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (tâche) à Microsoft.EntityFrameworkCore.DbContove__48 ) --- Fin de la trace de la pile à partir de l'emplacement précédent où l'exception a été levée --- sur System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () sur System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (Task task) sur Abp.EntityFrameworkCore.Ab .d__49.MoveNext () dans D:\Github\aspnetboilerplate\src\Abp.EntityFrameworkCore\EntityFrameworkCore\AbpDbContext.cs: ligne 214

INFO 2018-04-11 13: 59: 53,439 [3] ore.Mvc.Internal.ControllerActionInvoker - Exécution de la méthode d'action MyCompany.MyProject.AdditionalMasterData.Tests.TestsAppService.CreateOrEdit (MyCompany.MyProject.Application) avec des arguments ([CreateOrEditTestDto]) - ModelState est valide AVERTISSEMENT 2018-04-11 14: 01: 48,396 [4] Mvc.ExceptionHandling.AbpExceptionFilter - L'opération de base de données devrait affecter 1 ligne (s) mais a réellement affecté 0 ligne (s). Les données peuvent avoir été modifiées ou supprimées depuis le chargement des entités. Voir http://go.Microsoft.com/fwlink/?LinkId=527962 pour plus d'informations sur la compréhension et la gestion des exceptions de concurrence optimiste. Abp.UI.UserFriendlyException: l'opération de base de données devrait affecter 1 ligne (s) mais en réalité 0 ligne (s) affectée. Les données peuvent avoir été modifiées ou supprimées depuis le chargement des entités. Voir http://go.Microsoft.com/fwlink/?LinkId=527962 pour plus d'informations sur la compréhension et la gestion des exceptions de concurrence optimiste. à MyCompany.MyProject.AdditionalMasterData.Tests.TestsAppService.d__7.MoveNext () dans C:\Repo\MyProjectVenues\aspnet-core\src\MyCompany.MyProject.Application\AdditionalMasterData\Tests\TestsAppService.cs: ligne 205 --- Fin de la trace de pile de l'emplacement précédent où l'exception a été levée --- à System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () à System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (tâche) à MyCompany.MyProject.AdditionalMasterDataApps. d__6.MoveNext () dans C:\Repo\MyProjectVenues\aspnet-core\src\MyCompany.MyProject.Application\AdditionalMasterData\Tests\TestsAppService.cs: ligne 170 --- Fin de la trace de pile de l'emplacement précédent où l'exception a été levée - - sur System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () sur System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (tâche) sur Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.d__12.M) trace depuis l'emplacement précédent où une exception a été levée --- sur System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () sur System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (tâche) sur Microsoft.AspNetCore.Mvc.Internal.Controller__Action MoveNext () --- Fin de la trace de la pile à partir de l'emplacement précédent où l'exception a été levée --- sur System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () sur Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.Rethrow (contexte ActionExecutedContext) sur Microsoft .AspNetCore.Mvc.Internal.ControllerActionInvoker.Next (State & next, Scope & scope, Object & state, Boolean & isCompleted) sur Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.d__14.MoveNext () --- Fin de la trace de pile à partir de l'emplacement précédent où exception a été levée --- à System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () à System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (tâche tâche) à Mi crosoft.AspNetCore.Mvc.Internal.ResourceInvoker.d__23.MoveNext ()

Mise à jour

J'ai la cause première du problème.

Donc, fondamentalement, j'ai un déclencheur d'insertion sur Entity2 et lorsque j'ai commenté la requête à l'intérieur de ce déclencheur, puis son bon fonctionnement.

Il y a environ 10 requêtes dans ce déclencheur et il est très difficile de savoir laquelle est à l'origine du problème. Alors, pourriez-vous s'il vous plaît laissez-moi savoir comment déboguer ce déclencheur?

6
vivek nuna

Assurez-vous que dans votre fonction de référentiel InsertAsync, vous n'appelez pas AddAsync à moins que vous n'utilisiez le générateur Microsoft.EntityFrameworkCore.Metadata.SqlServerValueGenerationStrategy.SequenceHiLo. COMME INDIQUÉ DANS LA DOCUMENTATION. AddAsync

4
Robert Raboud

J'ai rencontré ce même problème avec une base de données SQLite, mais avec des mises à jour au lieu d'inserts. Appeler SaveChangesAsync au lieu de SaveChanges était la solution.

1
pmichelbrink

Pour mon cas, le problème est survenu lorsque j'ai essayé de passer à la méthode pdate () une entité qui n'existait pas dans la base de données.

0
VahidShir

J'avais un problème similaire. J'ai utilisé EF Core. J'ai été aidé par le changement suivant pour mon code.

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

PD: Désolé, le problème a été résolu en ajoutant un attribut d'identité pour User.Id

    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
0
user2463841