如何添加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); 
+0

https://docs.microsoft.com/en-us/aspnet/core/tutorials/first-mvc-app/working-with-sql#seed-the-database – Alexan

如果任何人应该是有兴趣的,我结束了以下解决方案:

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();