将用户/密码大量插入ASP.Identity用户和成员资格表

use*_*800 5 asp.net asp.net-identity

我想在ASP.Identity Users and Memberships表中插入1000多个用户名和密码。理想情况下,我想在插入密码时对其进行加密。可以使用T-SQL完成此操作,还是必须使用C#中的某些代码来遍历将加密密码并插入用户名和其他信息的例程?一个例子,将不胜感激。

Jaw*_*ngh 5

好的,所以我找到了一种在不影响性能的情况下批量插入AspNet身份表的方法。

public void CreateBulkIdentityUsers(List<string> userNames)
    {
        using (ApplicationDbContext context = new ApplicationDbContext())
        {
            var userManager = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(context));

            var users = context.Users.Where(u => userNames.Contains(u.UserName)).ToList();

            PasswordHasher passwordHasher = new PasswordHasher();

            foreach (var userName in userNames)
            {
                var user = users.Where(u => u.UserName == userName).FirstOrDefault();

                if (user == null)
                {
                    user = new ApplicationUser()
                    {
                        UserName = userName,
                        EmailConfirmed = false,
                        PhoneNumberConfirmed = false,
                        TwoFactorEnabled = false,
                        LockoutEnabled = false,
                        PasswordHash = passwordHasher.HashPassword("Password@123"),
                        SecurityStamp = Guid.NewGuid().ToString().ToLower()
                    };

                    context.Users.Add(user);
                }
            }
            context.SaveChanges();
        }
    }
Run Code Online (Sandbox Code Playgroud)
  1. 在循环之前获取所有用户。这样我们就可以检查该用户是否已经存在于数据库中。

  2. 初始化PasswordHasher以哈希密码。

  3. 如果找到用户,则将其跳过。如果找不到,请使用一些密码创建一个新用户。

希望,这对某人有帮助。:)


Ant*_*Chu -1

我认为你需要在 C# 中执行此操作。尝试这个...

var userManager = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(new ApplicationDbContext()));
foreach (var user in users)
{
    var appUser = new ApplicationUser 
    { 
        UserName = user.UserName  // assign other properties here
    };
    await userManager.CreateAsync(appUser, user.Password);
}
Run Code Online (Sandbox Code Playgroud)

  • 我知道它已经有 4 年了……但是“CreateAsync”方法一次执行 1 个插入。难道不是在一个数据库事务中批量插入 400 个用户吗? (3认同)