【发布时间】:2020-03-17 17:16:55
【问题描述】:
下面是我的种子类..
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);
}
}
在启动类DataInitializer.SeedData(userManager, roleManager);调用这个方法
在播种时出现低于错误的错误..我正在为 postgresql 使用 ef core 3.. 我得到了
System.ObjectDisposedException: '无法访问已处置的对象。 对象名称:'MyUserManager'。'
【问题讨论】:
-
您应该返回任务并一直等待它们。不要从
async方法返回void:docs.microsoft.com/en-us/archive/msdn-magazine/2013/march/… 请在Startup.cs文件中显示您调用DataInitializer.SeedData(userManager, roleManager);的代码。 -
public void Configure(IApplicationBuilder app, IWebHostEnvironment env, UserManager
userManager, RoleManager roleManager) { DataInitializer.SeedData(userManager, roleManager); } -
感谢我在配置方法中调用最后一行...