gpt4 book ai didi

asp.net - UserManager - 访问已处置对象

转载 作者:行者123 更新时间:2023-12-02 10:55:52 26 4
gpt4 key购买 nike

使用 ASP.NET Core 2。

我正在尝试初始化一些应用程序范围的数据。为此,我创建了一个名为 DbInitializer 的新类。 ,一个名为 IDbInitializer 的接口(interface),并将其注册为 AddScopedStartup.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);
}

问题是我随机遇到异常

Cannot access a disposed object

来自 userManager.CreateAsyncuserManager.AddToRoleAsync .

最佳答案

我认为问题在于您的 DbInitializer.Initialize() 方法调用(应标记为 async 并返回 Task)是未正确等待,因为 Startup.Configure 方法必须返回 void。如果您将调用更改为 DbInitializer.Initialize().Wait() ,它将等待任务完成,它应该可以工作。

关于asp.net - UserManager - 访问已处置对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46670706/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com