繁体   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