C# 在ASP.NET 6&;中创建用户和角色;实体框架7

C# 在ASP.NET 6&;中创建用户和角色;实体框架7,c#,asp.net,usermanager,role-manager,C#,Asp.net,Usermanager,Role Manager,我需要在第一次启动web应用程序时创建用户和角色。为此,我将代码写入Startup.cs中的Configure()函数 当我运行应用程序时,出现以下错误: mscorlib.dll中出现“System.AggregateException”类型的异常,但在调用我的第一个函数“CreateUsers”时未在用户代码中处理 代码: public async void Configure(IApplicationBuilder应用程序、IHostingEnvironment环境、ILoggerFact

我需要在第一次启动web应用程序时创建用户和角色。为此,我将代码写入
Startup.cs
中的
Configure()
函数

当我运行应用程序时,出现以下错误:

mscorlib.dll中出现“System.AggregateException”类型的异常,但在调用我的第一个函数“CreateUsers”时未在用户代码中处理

代码:

public async void Configure(IApplicationBuilder应用程序、IHostingEnvironment环境、ILoggerFactory loggerFactory、IServiceProvider服务提供程序、ApplicationDbContext上下文)
{
...
等待CreateUsers(上下文、服务提供者);
等待CreateRoles(上下文、服务提供者);
}
专用异步任务CreateUsers(ApplicationDbContext上下文,IServiceProvider serviceProvider)
{
列表用户=新列表();
添加(新应用程序用户{UserName=“devUser”,电子邮件=”dev@dev.com,LastName=“dev”,FirstName=“dev”,PasswordHash=“devpassword”});
添加(新应用程序用户{UserName=“workUser”,电子邮件=”work@work.com,LastName=“work”,FirstName=“work”,PasswordHash=“workPassword”});
foreach(用户中的var用户)
{
var userExist=wait_userManager.findbyemailsync(user.Email);
if(userExist!=null)
{
wait\u userManager.CreateAsync(user,user.PasswordHash);
context.Users.Add(用户);
SaveChanges();
}
}
}
专用异步任务CreateRoles(ApplicationDbContext上下文,IServiceProvider serviceProvider)
{
var UserManager=serviceProvider.GetRequiredService();
var rolemager=serviceProvider.GetRequiredService();
列表角色=新列表();
添加(新的IdentityRole{Name=“Developer”,NormalizedName=“Developer”});
添加(新的IdentityRole{Name=“Work”,NormalizedName=“Work”});
添加(新的IdentityRole{Name=“Admin”,NormalizedName=“Admin”});
添加(新的IdentityRole{Name=“Redacteur”,NormalizedName=“Redacteur”});
添加(新的IdentityRole{Name=“correctoreur”,NormalizedName=“correctoreur”});
添加(新的IdentityRole{Name=“Membre”,NormalizedName=“Membre”});
foreach(角色中的var角色)
{
var roleExist=await rolemager.RoleExistsAsync(role.Name);
如果(!roleExist)
{
context.Roles.Add(角色);
SaveChanges();
}
}
var devuser=await UserManager.findbyemailsync(“dev@dev.com");
等待UserManager.AddToRoleAsync(devuser,DEVELOPER);
var work=await UserManager.findbyemailsync(“work@work.com");
等待UserManager.AddToRoleAsync(工作,“工作”);
}

检查
aggregateeexception
中的
InnerException
属性,查看引发的实际异常{“对象引用未设置为对象的实例。”}?那?是的,那是你实际的异常:哪一行抛出异常?可能与你的问题无关,但你可能应该在数据库迁移中的配置类的seed方法中这样做?“seed”方法不存在于int mvc6:)@Jcl:我第一次查看foreach时,他认为“var userExist=await UserManager.findbyemailsync(user.Email);“然后我抛出异常。此方法用以下代码验证:public class ApplicationDbContext:IdentityDbContext{protectedoverride void OnModelCreating(ModelBuilder){base.OnModelCreating(builder);}”
 public async void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory, IServiceProvider serviceProvider, ApplicationDbContext context)
{
   ...
        await CreateUsers(context, serviceProvider);
        await CreateRoles(context, serviceProvider);
    }

    private async Task CreateUsers(ApplicationDbContext context, IServiceProvider serviceProvider)
    {
        List<ApplicationUser> users = new List<ApplicationUser>();
        users.Add(new ApplicationUser { UserName = "devUser", Email = "dev@dev.com", LastName = "dev", FirstName = "dev", PasswordHash = "devpassword" });
        users.Add(new ApplicationUser { UserName = "workUser", Email = "work@work.com", LastName = "work", FirstName = "work", PasswordHash = "workPassword" });

        foreach(var user in users)
        {
            var userExist = await _userManager.FindByEmailAsync(user.Email);
            if(userExist != null)
            {
                await _userManager.CreateAsync(user, user.PasswordHash);
                context.Users.Add(user);
                context.SaveChanges();
            }
        }
    }

    private async Task CreateRoles(ApplicationDbContext context, IServiceProvider serviceProvider)
    {
        var UserManager = serviceProvider.GetRequiredService<UserManager<ApplicationUser>>();
        var RoleManager = serviceProvider.GetRequiredService<RoleManager<IdentityRole>>();

        List<IdentityRole> roles = new List<IdentityRole>();
        roles.Add(new IdentityRole { Name = "Developer", NormalizedName = "DEVELOPER" });
        roles.Add(new IdentityRole { Name = "Work", NormalizedName = "WORK" });
        roles.Add(new IdentityRole { Name = "Admin", NormalizedName = "ADMIN" });
        roles.Add(new IdentityRole { Name = "Redacteur", NormalizedName = "REDACTEUR" });
        roles.Add(new IdentityRole { Name = "Correcteur", NormalizedName = "CORRECTEUR" });
        roles.Add(new IdentityRole { Name = "Membre", NormalizedName = "MEMBRE" });

        foreach(var role in roles)
        {
            var roleExist = await RoleManager.RoleExistsAsync(role.Name);
            if(!roleExist)
            {
                context.Roles.Add(role);
                context.SaveChanges();
            }
        }

        var devuser = await UserManager.FindByEmailAsync("dev@dev.com");
        await UserManager.AddToRoleAsync(devuser, "DEVELOPER");
        var work = await UserManager.FindByEmailAsync("work@work.com");
        await UserManager.AddToRoleAsync(work, "WORK");
    }