2017-04-06 14 views
0

私のデータベースでいくつかのテストデータを初期化しようとしていますが、アイデンティティフレームワークのApplicationUserにパスワードを追加する際にいくつか問題があります。dotnetコアにテストデータとしてApplicationUserを追加する方法

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コアでサポートされていないとして、私は次のようにダミーデータを追加しようとしました:私は以前、私はこのようなシード法を使用している、これを行っている

:私はまた、私はシード法で使用したのと同じ方法を使用しようとしましたが、それは動作しません。どちらか私はラインに次のエラーメッセージが表示されますように私は、データベースへの結果1を追加した

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

は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

答えて

0

すなわち、誰が興味を持ってする必要がある場合、私は次の解決策になってしまった:

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."); 
} 

と、このようなスタートアップファイルに設定メソッド内でこのメソッドを呼び出します:

1

あなたはユーザーとの組み合わせでPasswordHasherを使用することができます」に 'System.Threading.Tasks.Task' から変換することはできません。

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(); 
関連する問題