2017-10-10 5 views
0

ASP.NETコア2の使用UserManager - 公開オブジェクトへのアクセス

私はいくつかのアプリケーション全体のデータを初期化しようとしています。そのために私はDbInitializerという新しいクラスを作成し、IDbInitializerというインターフェースを作成し、AddScopedStartup.ConfigureServicesという名前で登録しました。

その後Startup.Configureから、私はDbInitializer.Initialize()を呼び出し、そのメソッド内UserManagerにいくつかの呼び出しがあります。

if (appDbContext.Roles.All(i => i.Name != adminGroupName)) 
{ 
    await roleManager.CreateAsync(new IdentityRole(adminGroupName)); 
}; 
var role = appDbContext.Roles.First(i => i.Name == adminGroupName); 

if (appDbContext.Users.All(i => i.UserName != adminSettings.Username)) 
{ 
    await userManager.CreateAsync(new ApplicationUser { UserName = adminSettings.Username, 
                 Email = adminSettings.Username, 
                 FirstName = adminSettings.FirstName, 
                 LastName = adminSettings.LastName, 
                 EmailConfirmed = true }, adminSettings.Password); 
} 
var adminUser = appDbContext.Users.First(i => i.UserName == adminSettings.Username); 

if (!appDbContext.UserRoles.Any(i => i.RoleId == role.Id && i.UserId == adminUser.Id)) 
{ 
    await userManager.AddToRoleAsync(adminUser, role.Name); 
} 

は、問題は、私は取得していますということである、ランダムに例外

はアクセスできません。配置対象物

userManager.CreateAsyncまたはuserManager.AddToRoleAsync

+0

DbInitializer.Initialize()asyncですか?プロトタイプを投稿する – ingvar

+0

はい、それはDbInitializerで次のように宣言されています:public async void Initialize() – user1044169

+0

public asyncに名前を変更しますか?Task Initialize()? – ingvar

答えて

2

私はこの問題は、Startup.Configureメソッドはvoidを返す必要がありますので、(asyncをマークし、Taskを返すべきである)あなたのDbInitializer.Initialize()メソッドの呼び出しが正しく、待望されていないことであると信じています。電話がDbInitializer.Initialize().Wait()に変更された場合は、タスクが完了するまで待つ必要があります。

関連する問題