簡體   English   中英

將 ExecuteInTransaction 與 UserManager 一起使用

[英]Using ExecuteInTransaction with UserManager

我們正在實施EnableRetryOnFailure但正如在https://docs.microsoft.com/en-us/ef/core/miscellaneous/connection-resiliency上所討論的那樣,這對於用戶定義的事務來說是開箱即用的。

上述鏈接(選項 3 和 4)的建議之一是使用ExecutionStrategy.ExecuteInTransaction ,並使用acceptAllChangesOnSuccess: false調用SaveChanges

這是必要的,以便在 SaveChanges 成功但事務失敗時可以重試事務。

我們遇到的問題是我們在事務中包含了UserManager方法,這些方法將在內部調用上下文中的SaveChanges

當我們無法將UserManager更改為使用acceptAllChangesOnSuccess: false時,我們該怎么做?

使用 UserManager.CreateUser 方法添加用戶將調用內部 UserStore 上的 SaveChanges 方法。 UserStore 類有一個公共屬性 AutoSaveChanges,它指示是否調用 SaveChanges 方法。 通過將 AutoSaveChanges 屬性設置為 false,然后調用 UserManager.CreateUser 方法,將不會調用 SaveChanges 方法。

https://github.com/dotnet/aspnetcore/blob/839cf8925278018903f53f22d580d15b0a59ca0f/src/Identity/EntityFrameworkCore/src/UserStore.cs#L141

  1. 將 UserStore.AutoSaveChanges 屬性設置為 false。
  2. userManager.CreateAsync(user)(不調用 SaveChanges)
  3. context.SaveChanges(acceptAllChangesOnSuccess: false)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM