use*_*169 2 asp.net entity-framework asp.net-identity asp.net-core
使用ASP.NET Core 2。
我正在尝试初始化一些应用程序范围的数据。为此,我创建了一个名为新类DbInitializer,称为界面IDbInitializer,并与注册他们AddScoped在Startup.ConfigureServices。
然后,从Startup.Configure,我调用,DbInitializer.Initialize()并且在该方法内有几个调用UserManager:
if (appDbContext.Roles.All(i => i.Name != adminGroupName))
{
await roleManager.CreateAsync(new IdentityRole(adminGroupName));
};
var role = appDbContext.Roles.First(i => i.Name == adminGroupName);
if (appDbContext.Users.All(i => i.UserName != adminSettings.Username))
{
await userManager.CreateAsync(new ApplicationUser { UserName = adminSettings.Username,
Email = adminSettings.Username,
FirstName = adminSettings.FirstName,
LastName = adminSettings.LastName,
EmailConfirmed = true }, adminSettings.Password);
}
var adminUser = appDbContext.Users.First(i => i.UserName == adminSettings.Username);
if (!appDbContext.UserRoles.Any(i => i.RoleId == role.Id && i.UserId == adminUser.Id))
{
await userManager.AddToRoleAsync(adminUser, role.Name);
}
Run Code Online (Sandbox Code Playgroud)
问题是我随机得到异常
无法访问已处置的对象
来自userManager.CreateAsync或userManager.AddToRoleAsync。
我相信问题在于您的DbInitializer.Initialize()方法调用(应标记为,async并返回a Task)未正确等待,因为该Startup.Configure方法必须返回void。如果将呼叫更改为DbInitializer.Initialize().Wait(),它将等待任务完成,那么它应该可以工作。
| 归档时间: |
|
| 查看次数: |
1543 次 |
| 最近记录: |