Asp.net UserManager-对已处置对象的访问

Asp.net UserManager-对已处置对象的访问,asp.net,entity-framework,asp.net-core,asp.net-identity,Asp.net,Entity Framework,Asp.net Core,Asp.net Identity,使用ASP.NET核心2 我正在尝试初始化一些应用程序范围的数据。为此,我创建了一个名为DbInitializer的新类,一个名为IDbInitializer的接口,并将它们注册到Startup.ConfigureServices中的AddScoped 然后从Startup.Configure,我调用DbInitializer.Initialize(),在该方法中有一些对UserManager的调用: if (appDbContext.Roles.All(i => i.Name != ad

使用ASP.NET核心2

我正在尝试初始化一些应用程序范围的数据。为此,我创建了一个名为
DbInitializer
的新类,一个名为
IDbInitializer
的接口,并将它们注册到
Startup.ConfigureServices
中的
AddScoped

然后从
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);
}
问题是我随机得到了一个例外

无法访问已释放的对象


userManager.CreateAsync
userManager.AddToRoleAsync
我认为问题在于没有正确地等待
DbInitializer.Initialize()
方法调用(应该标记为
async
并返回
任务
),由于
启动,Configure
方法必须返回void。如果您将调用更改为
DbInitializer.Initialize().Wait()
,它将等待任务完成,那么它应该可以工作。

DbInitializer.Initialize()是异步的吗?Post它是prototypeYes,它在DbInitializer中声明为:public async void Initialize()重命名为public async Task Initialize()有帮助吗?使用Oracles MySQL提供程序?它被破坏,并在第一次查询后抛出对象处理的异常(第一次有效,随后抛出)。使用Pomelo MySQL providerI最终删除了所有异步代码。现在它起作用了。谢谢大家。