gpt4 book ai didi

c# - 与 ASP.NET Identity UserManager 的事务

转载 作者:行者123 更新时间:2023-12-02 15:33:01 25 4
gpt4 key购买 nike

我正在尝试更新用户。

AppUserManager appUserManager = HttpContext.GetOwinContext().GetUserManager<AppUserManager>();

AppUser member = await appUserManager.FindByIdAsync(User.Identity.GetUserId());

member.HasScheduledChanges = true;

IdentityResult identityResult = appUserManager.Update(member);

如果对 Web API 的后续调用失败,我需要回滚对用户的任何更改。我了解交易,如下所示:

using (var context = HttpContext.GetOwinContext().Get<EFDbContext>())
{
using (var dbContextTransaction = context.Database.BeginTransaction())
{
try
{
// Changes

member.HasScheduledChanges = true;

// Would this be transactional?
IdentityResult identityResult = appUserManager.Update(member);

context.SaveChanges();

dbContextTransaction.Commit();
}
catch //(Exception ex)
{

// dbContextTransaction.Rollback(); no need to call this manually.
}
}
}

但是在 try block 内使用 AppUserManager 完成的操作是否是事务性的?另外,它们是否使用相同的 EFDbContext 实例?换句话说,我不知道第二个代码示例开头的 var context 是否会被 try block 中的 appUserManager“Update”方法调用使用。

此外,AppUserManager 的创建方式如下:

public static AppUserManager Create(IdentityFactoryOptions<AppUserManager> options, IOwinContext context)
{

EFDbContext db = context.Get<EFDbContext>();

AppUserManager manager = new AppUserManager(new UserStore<AppUser>(db));

// etc.

return manager;
}

最佳答案

您的示例中的

EFDbContext 是相同的 - 在这两种情况下您都从 OWIN 上下文解析它们,因此这不是问题。然而,Identity是以与存储无关的方式编写的,这意味着存储机制可以被非SQL Server取代。这要求 AppUserManager 内部缺少事务。因此您需要创建自己的。

我经常在生产应用程序中使用 varscope = new TransactionScope(TransactionScopeAsyncFlowOption.Enabled)(只是需要更多的架构):

using(var scope = new TransactionScope(TransactionScopeAsyncFlowOption.Enabled))
{
try
{
AppUserManager appUserManager = HttpContext.GetOwinContext().GetUserManager<AppUserManager>();

AppUser member = await appUserManager.FindByIdAsync(User.Identity.GetUserId());

member.HasScheduledChanges = true;

IdentityResult identityResult = appUserManager.Update(member);
scope.Complete();
}
catch (Exception ex)
{
scope.Dispose();
throw;
}
}

关于c# - 与 ASP.NET Identity UserManager 的事务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36636272/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com