C# 在ASP.NET 6&;中创建用户和角色;实体框架7
我需要在第一次启动web应用程序时创建用户和角色。为此,我将代码写入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
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");
}