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?
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
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.
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.
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)]