Wdrażamy EnableRetryOnFailure, ale jak omówiono na temat HTTPS: //docs.Microsoft.com/en-us/ef/core/misclewie/Connection-Resililling, nie działa to z pola dla transakcji zdefiniowanych przez użytkownika.

Jedną z zaleceń z powyższego linku (opcje 3 & amp; 4) jest użycie ExecutionStrategy.ExecuteInTransaction i zadzwonić SaveChanges za pomocą acceptAllChangesOnSuccess: false.

Jest to konieczne, aby transakcja może zostać naprawiona, jeśli zapisuje się zapisuje sukcesy, ale transakcja nie powiedzie się.

Problem, który posiadamy, jest to, że mamy metody UserManager zawinięte wewnątrz naszych transakcji, a te są wewnętrznie dzwoniące SaveChanges w kontekście.

Jak możemy to zrobić, kiedy nie możemy zmienić UserManager, aby użyć acceptAllChangesOnSuccess: false?

0
GGG 16 styczeń 2020, 20:22

1 odpowiedź

Najlepsza odpowiedź

Dodanie użytkownika za pomocą metody usermanager.createuser zadzwoni do metody Savechans na wewnętrznych użytkownikach. Klasa Userstore ma własność publiczną, autosavechanges, która wskazuje, czy wywołać metodę Savechans. Ustawiając właściwość AutoSavechanges do FAŁSZ, a następnie wywołując metodę USerManager.Createuser, metoda zapisywania Savechans nie zostanie wywołana.

https://github.com/dotnet/aspnetcore/blob/839CF8925278018903F53F22D580D15B0A59CA0F/src/idity/entityframeworcore/src/userstore.cs#l141.

  1. Ustaw FAŁSZ do sklepu użytkownika.Autosave zmienia nieruchomość.
  2. usermanager.Createyync (użytkownik) (bez wywołania wezwania)
  3. kontekst.
1
user13054984 16 marzec 2020, 04:15