要解决ASP.NET Core Identity种子数据未持久化到数据库的问题,您可以按照以下步骤进行操作:
SeedData
类,用于种子数据的初始化。示例如下:public static class SeedData
{
public static async Task Initialize(IServiceProvider serviceProvider)
{
using (var scope = serviceProvider.CreateScope())
{
var userManager = scope.ServiceProvider.GetRequiredService>();
var roleManager = scope.ServiceProvider.GetRequiredService>();
// 检查是否已经存在种子数据
if (!await roleManager.RoleExistsAsync("Admin"))
{
// 创建角色
await roleManager.CreateAsync(new IdentityRole("Admin"));
}
if (!await roleManager.RoleExistsAsync("User"))
{
// 创建角色
await roleManager.CreateAsync(new IdentityRole("User"));
}
// 创建管理员用户
var adminUser = new IdentityUser
{
UserName = "admin@example.com",
Email = "admin@example.com"
};
var adminPassword = "Admin@123"; // 设置管理员用户密码
if (await userManager.FindByEmailAsync(adminUser.Email) == null)
{
// 创建管理员用户
var result = await userManager.CreateAsync(adminUser, adminPassword);
if (result.Succeeded)
{
// 将管理员用户分配给"Admin"角色
await userManager.AddToRoleAsync(adminUser, "Admin");
}
}
}
}
}
Startup.cs
文件中的Configure
方法中调用SeedData.Initialize
方法,以确保种子数据被初始化。示例如下:public void Configure(IApplicationBuilder app, IWebHostEnvironment env, IServiceProvider serviceProvider)
{
// ...
// 调用种子数据初始化方法
SeedData.Initialize(serviceProvider).Wait();
// ...
}
注意:在调用SeedData.Initialize
方法之前,确保数据库已经被创建并迁移。
通过以上步骤,您可以在每次应用程序启动时自动将种子数据添加到数据库中。请根据您的需求自行调整种子数据的内容和逻辑。