データベースにユーザーとロールをシードする際に問題が発生しています。
ユーザーとロールの両方が作成されます (エラーがスローされた後、データベースで確認できます)。
ただし、ユーザーがロールに属しているかどうかを確認しようとすると、例外が発生します。
私のコードは次のとおりです:
public class tbInitializer<T> : DropCreateDatabaseAlways<tbContext>
{
protected override void Seed(tbContext context)
{
ApplicationDbContext userscontext = new ApplicationDbContext();
var userStore = new UserStore<ApplicationUser>(userscontext);
var userManager = new UserManager<ApplicationUser>(userStore);
var roleStore = new RoleStore<IdentityRole>(userscontext);
var roleManager = new RoleManager<IdentityRole>(roleStore);
if(!userscontext.Users.Any(x=> x.UserName=="marktest"))
{
var user = new ApplicationUser { UserName = "marktest", Email = "[email protected]" };
userManager.Create(user, "Pa$$W0rD!");
}
if (!roleManager.RoleExists("Admin"))
{
roleManager.Create(new IdentityRole("Admin"));
}
if(!userManager.IsInRole("marktest","Admin"))
{
userManager.AddToRole("marktest","Admin");
}
しかし、次の行に注意してください。
if(!userManager.IsInRole("marktest","Admin"))
次のエラーとともに例外がスローされます:UserId not found.
例外がスローされた後に確認すると、ユーザーとロールは両方ともデータベースに存在します。
私が何を間違っているのか誰か分かりますか?
ご協力ありがとうございます。
マーク
ベストアンサー1
他の誰かがこの問題に遭遇した場合に備えて、解決策を見つけました。
「IsInRole」は UserName 文字列ではなく User.Id を期待しているので、次のように変更しました。
if (!userManager.IsInRole(user.Id, "Admin"))
{
userManager.AddToRole(user.Id, "Admin");
}
したがって、動作するコードは次のようになります。
ApplicationDbContext userscontext = new ApplicationDbContext();
var userStore = new UserStore<ApplicationUser>(userscontext);
var userManager = new UserManager<ApplicationUser>(userStore);
var roleStore = new RoleStore<IdentityRole>(userscontext);
var roleManager = new RoleManager<IdentityRole>(roleStore);
// Create Role
if (!roleManager.RoleExists("Admin"))
{
roleManager.Create(new IdentityRole("Admin"));
}
if(!userscontext.Users.Any(x=> x.UserName=="marktest"))
{
// Create User
var user = new ApplicationUser { UserName = "marktest", Email = "[email protected]" };
userManager.Create(user, "Pa$$W0rD!");
// Add User To Role
if (!userManager.IsInRole(user.Id, "Admin"))
{
userManager.AddToRole(user.Id, "Admin");
}
}
それが役に立つことを願います。
マーク