【问题标题】:.net 5 Set AutoSaveChanges to false in Startup.net 5 在启动中将 AutoSaveChanges 设置为 false
【发布时间】:2021-11-04 17:31:23
【问题描述】:

使用 .net 5 和身份,我无法弄清楚如何在我的启动文件上设置 AutoSaveChanges。如果在注册或登录代码期间出现问题,我需要对我的用户表进行大量清理。

services.AddDefaultIdentity<MyUser()
.AddRoles<IdentityRole().AddEntityFrameworkStores<MyDbContext>();

我在Prevent ASP.NET Identity's UserManager from automatically saving 中看到了答案,但不知道这与我的启动服务有何关系。

【问题讨论】:

  • 我正在尝试设置为 false,以便我可以控制提交。

标签: .net asp.net-identity .net-5


【解决方案1】:

找到一篇仍然适用于 .NET 5 的旧帖子。

要在 UserManager 中关闭 AutoSave,您需要注册一个自定义 UserStore。为此,请创建一个新文件:

public class CustomUserStore : UserStore<IdentityUser>  // important to use custom Identity user object here!  
    {
        public CustomUserStore(AppDbContext context)
        : base(context)
        {
            AutoSaveChanges = false;
        }
    }

在 Startup.cs 中,通过将以下内容添加到 ConfigureServices 来添加依赖注入:

services.AddScoped&lt;IUserStore&lt;IdentityUser&gt;, CustomUserStore&gt;();
确保使用相同的标识对象,否则将不起作用!

现在,当您执行此操作时,如果在添加声明或角色之前不将用户保存到数据库中,UserManager 仍然无法完全工作。如果事情失败,您必须实施自己的数据回滚。例如,我的 AuthController 具有尝试添加角色的逻辑。如果失败,我将删除给刚刚创建的用户:

                var isCreated = await _userManager.CreateAsync(newUser, user.Password);
                await _context.SaveChangesAsync();  

                if (!isCreated.Succeeded)
                {
                    var roleResult = await _userManager.AddToRoleAsync(newUser, "User");

                    if (!roleResult.Succeeded)
                    {
                        throw new Exception("not saved");

                    }
                    await _context.SaveChangesAsync();
                    var jwtToken = await GenerateAuthResult(newUser, null);
                        
                    return Ok(jwtToken);  // or whatever response needed
                }
                else
                {
                    await _userManager.DeleteAsync(newUser);
                    await _context.SaveChangesAsync()
                    return BadRequest( // add response );
                }

旧帖:UserManager's AutoSaveChanges in .NET Core 2.1

Identity 上发布的问题不是完全事务性的:https://github.com/dotnet/aspnetcore/issues/18407

【讨论】:

    猜你喜欢
    • 2018-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多