在 ef 核心播种数据时出错

getting Error while ef core seeding the data

下面是我的种子class..

   public static class DataInitializer
    {
        public static async void SeedRolesAsync(RoleManager<Role> roleManager)
        {
            if (roleManager.RoleExistsAsync("Administrator").Result)
                return;

            var role = new Role
            {
                Name = "Administrator",
                Description = "Perform all the operations."
            };
            await roleManager.CreateAsync(role);


        }

        public static async void SeedRoleClaimsAsync(RoleManager<Role> roleManager)
        {



            var role = await roleManager.FindByNameAsync("Administrator");


            var roleClaims = await roleManager.GetClaimsAsync(role);

            foreach (var claimString in AllClaims.GetList())
            {
                var newClaim = new Claim(claimString, "");
                if (!roleClaims.Any(rc => rc.Type.ToString() == claimString))
                {
                    await roleManager.AddClaimAsync(role, newClaim);
                }
            }
        }

        public static async void SeedUsersAsync(UserManager<User> userManager)
        {
            var user = new User
            {
                UserName = "admin@example.com",
                Email = "admin@example.com",
                FirstName = "Admin",
                LastName = "User",
                Enabled = true
            };
            var result = await userManager.CreateAsync(user, "Admin@123");
            if (result.Succeeded)
            {
                await userManager.AddToRoleAsync(user, "Administrator");
            }
        }

        public static void SeedData(UserManager<User> userManager, RoleManager<Role> roleManager)
        {
            SeedRolesAsync(roleManager);
            SeedRoleClaimsAsync(roleManager);
            SeedUsersAsync(userManager);
        }
    }

启动时调用此方法classDataInitializer.SeedData(userManager, roleManager);

播种时出现低于错误的错误..我正在为 postgresql 使用 ef core 3..我正在

System.ObjectDisposedException: '无法访问已释放的对象。 对象名称:'MyUserManager'.'

尝试一直使用任务 - 如果您不这样做 return 有可能即使某些事情尚未完成,代码也会继续处理。

public static async Task SeedData(UserManager<User> userManager, RoleManager<Role> roleManager)
{
    await SeedRolesAsync(roleManager);
    await SeedRoleClaimsAsync(roleManager);
    await SeedUsersAsync(userManager);
}

public static async Task SeedRolesAsync(RoleManager<Role> roleManager)
{
    ⋮
}

public static async Task SeedRoleClaimsAsync(RoleManager<Role> roleManager)
{
    ⋮
}

public static async Task SeedUsersAsync(UserManager<User> userManager)
{
    ⋮
}

您也可以将此调用移动到 Program.csMain 方法中,因为该方法可以 async.

public static async Task Main(string[] args)
{
    var host = CreateHostBuilder(args).Build();
    using (var scope = host.Services.CreateScope())
    using (var userManager = scope.ServiceProvider.GetRequiredService<UserManager<User>>())
    using (var roleManager = scope.ServiceProvider.GetRequiredService<RoleManager<Role>>())
    {
        await DataInitializer.SeedData(userManager, roleManager).ConfigureAwait(false);
    }

    await host.RunAsync().ConfigureAwait(false);
}