我的環境:
項目腳手架選擇了個人用戶帳戶。它採用ASP.net MVC5,身份1.0 我啓用代碼優先遷移對我PrimaryApplicationContext(不是ApplicationDbContext了在IdentityModel.cs創建)
我種方法如下所示
protected override void Seed(MYProject.DAL.PrimaryApplicationContext context)
{
ApplicationDbContext userContext = new ApplicationDbContext();
var rm = new RoleManager<IdentityRole>(new RoleStore<IdentityRole>(userContext));
var um = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(userContext));
if (!rm.RoleExists("Developer"))
{
var idResult = rm.Create(new IdentityRole("Developer"));
}
if (um.FindByName("Super") == null)
{
um.Create(new ApplicationUser() { UserName = "Super" } , "Password");
ApplicationUser user = um.FindByName("Super");
um.AddToRole(user.Id, "Developer");
}
}
如果您的應用程序使用相同的上下文來存儲用戶數據,因爲它不會像應用程序數據那樣存儲用戶數據,您不需要創建新的ApplicationDbContext,只需使用傳遞給種子方法的上下文。
步驟1-創建用於存儲身份數據的任何上下文的實例。
步驟2-使用步驟1上下文創建RoleManager和UserManager的實例。 *如果你遇到像「角色管理器沒有啓用」的錯誤,你需要添加
<roleManager enabled="true" />
到Web.config,節點下。
步驟3-使用角色管理器查看角色是否已存在,如果不存在 - 創建它。
步驟4-使用用戶管理器來查看用戶是否已經存在,如果沒有 - 創建它。
步驟5-創建角色和用戶後,從數據庫中檢索用戶(您將需要用戶標識添加到角色中) *請注意用戶以及角色管理器創建方法返回身份結果對象,而不是角色/用戶對象,所以下面的代碼是無效的
var result = usermanager.Create(new ApplicationUser()...
usermanager.AddToRole(result.Id, "Developer");
步驟6-使用的UserManager檢索到的用戶添加到該角色。 步驟7-向Package-Manager-Console發出Update-Database命令以重新爲數據庫創建種子。
您是否最初創建「TestRole」? –
我只能看到的解決方案是爲UserManager創建一個具有AutoDetectChangesEnabled = true的單獨DbContext; – Vindberg