如何添加ApplicationUser作为测试数据在dotnet核心
问题描述:
我试图初始化我的数据库中的一些测试数据,并且在Identity Framework中向ApplicationUser添加密码时遇到一些问题。如何添加ApplicationUser作为测试数据在dotnet核心
当我已经这样做了前面,我已经使用这样的种子方法:
protected override void Seed(ApplicationDbContext db)
{
var userManager = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(db));
var adminuser = new ApplicationUser { Email = "[email protected]", UserName = "[email protected]", FirstName = "admin", LastName = "test" };
userManager.Create(adminuser, "Password1.");
userManager.AddToRole(adminuser.Id, role:"admin");
}
但作为种子法不DOTNET核心支持我试图通过以下方式添加虚拟数据:
using (var serviceScope =
app.ApplicationServices.GetRequiredService<IServiceScopeFactory>().CreateScope())
db.Database.EnsureCreated();
db.AddRange(
new ApplicationUser { UserName = "[email protected]", Email = "[email protected]" },
new ApplicationUser { UserName = "[email protected]", Email = "[email protected]" }
);
db.SaveChanges();
我还试图用我的种子方法用同样的方法,但是,这并不工作,要么我得到就行了以下错误消息是我RESULT1添加到数据库:
无法从 'System.Threading.Tasks.Task' 转换为“Server.Models.ApplicationUser
using (var serviceScope =
app.ApplicationServices.GetRequiredService<IServiceScopeFactory>().CreateScope())
{
var db = serviceScope.ServiceProvider.GetService<ApplicationDbContext>();
var userManager = app.ApplicationServices.GetService<UserManager<ApplicationUser>>();
var au1 = new ApplicationUser { UserName = "[email protected]", Email = "[email protected]" };
var result1 = userManager.CreateAsync(au1, "Test123");
db.Users.Add(result1);
答
如果任何人应该是有兴趣的,我结束了以下解决方案:
public async Task CreateUsersAndRoles(IServiceScope serviceScope)
{
var userManager = serviceScope.ServiceProvider.GetService<UserManager<ApplicationUser>>();
await userManager.CreateAsync(new ApplicationUser { UserName = "[email protected]", Email = "[email protected]"}, "Password1.");
}
,并在这样的启动文件的配置方法中调用此方法:
await CreateUsersAndRoles(app.ApplicationServices.GetRequiredService<IServiceScopeFactory>().CreateScope());
答
您可以结合使用PasswordHasher与用户。
即
var user = new User();
var hasher = new PasswordHasher<User>();
db.AddRange(
new ApplicationUser { UserName = "[email protected]", Email = "[email protected]", PasswordHash = hasher.HashPassword(user, "Password1") },
);
db.SaveChanges();
https://docs.microsoft.com/en-us/aspnet/core/tutorials/first-mvc-app/working-with-sql#seed-the-database – Alexan