c# - 尝试在 .NET Core 3.0 中植入角色时,获取任务被取消错误

标签 c# asp.net-core .net-core-3.0 ef-core-3.0

在我的 .NET Core 3.0 应用程序中,我试图在应用程序第一次执行并连接到数据库时将新角色和用户植入数据库。

所以我写了这个简单的类:

public static class UserAndRoleDataInitializer
{
    public static void SeedData(UserManager<AppUser> userManager, RoleManager<IdentityRole<Guid>> roleManager)
    {
        SeedRoles(roleManager);
        SeedUsers(userManager);
    }

    private static async void SeedRoles(RoleManager<IdentityRole<Guid>> roleManager)
    {           
        var exists = await roleManager.RoleExistsAsync("administrator");
        if (!exists)
        {               
            await roleManager.CreateAsync(new IdentityRole<Guid>("administrator"));
        }

        exists = await roleManager.RoleExistsAsync("editor");
        if (!exists)
        {
            await roleManager.CreateAsync(new IdentityRole<Guid>("editor"));
        }
    }

    ...
}

这是从 Program.cs 调用的:
var userManager = serviceProvider.GetRequiredService<UserManager<AppUser>>();
var roleManager = serviceProvider.GetRequiredService<RoleManager<IdentityRole<Guid>>>();
UserAndRoleDataInitializer.SeedData(userManager, roleManager);

每次SeedData执行我收到以下错误:

System.Threading.Tasks.TaskCanceledException: 'A task was canceled.'



SeedRoles的第一行: var exists = await roleManager.RoleExistsAsync("administrator");

我研究了网络,试图找到一些答案,但找不到与我的用例类似的东西。任何帮助将不胜感激。

最佳答案

@Guilherme 的评论真的很有帮助。

这是我为使其工作所做的工作:

public static class UserAndRoleDataInitializer
{
    public static async Task<IdentityResult> SeedData(UserManager<AppUser> userManager, RoleManager<IdentityRole<Guid>> roleManager)
    {
        await SeedRoles(roleManager);
        await SeedUsers(userManager);

        return IdentityResult.Success;
    }

    private static async Task<IdentityResult> SeedRoles(RoleManager<IdentityRole<Guid>> roleManager)
    {                       
        var exists = await roleManager.RoleExistsAsync("Administrator");
        if (!exists)
        {               
            await roleManager.CreateAsync(new IdentityRole<Guid>("Administrator"));
        }
        ...
        return IdentityResult.Success;
    }

    private static async Task<IdentityResult> SeedUsers(UserManager<AppUser> userManager)
    {            
        var usr = await userManager.FindByNameAsync("admin");
        if (usr == null)
        {
            AppUser user = new AppUser
            {
                UserName = "admin",
                Email = "gbetsos@yahoo.com",
                FirstName = "Giorgos",
                LastName = "Betsos"
            };

            IdentityResult result = await userManager.CreateAsync(user, "P@ssw0rd1!");

            if (result.Succeeded)
            {
                await userManager.AddToRoleAsync(user, "Administrator");
            }
        }

        return IdentityResult.Success;
    } 
}

最后但并非最不重要的是,这就是 SeedDataMain 调用:
 UserAndRoleDataInitializer.SeedData(userManager, roleManager).Wait();

关于c# - 尝试在 .NET Core 3.0 中植入角色时,获取任务被取消错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58995827/

相关文章:

C# GeckoFX 浏览器 - 如何单击/将值设置为 XPath?

c# - 如何创建 HttpPostedFileBase(或其继承类型)的实例

c# - 将空的 DateTime 值发送到 SQL 存储过程。但不为空

c# - Properties.Settings 在 ASP.NET Core 中不可用

c# - Azure IoT 中心对其他设备的未经授权访问

c# - User.Identity.GetUserId() 可以被用户伪造吗?

javascript - 如何阻止 ASP.NET Core 2.0 MVC 缩小修改特定文件?

azure - 使用 Azure SQL 的 ASP.Net Core 2.1 Serilog SQL Server 接收器在本地运行,但不能从 Azure 应用服务运行

c# - 自托管Net Core 3应用不走端口设置

asp.net-core-3.0 - 将.NET Core 2迁移到.NET Core 3 : HttpContent does not contain a definition for "ReadAsAsync"