2014-01-19 44 views
2

我想插入初始用戶,角色和附加用戶使用ASP.NET MVC 5身份的角色。ASP.NET MVC 5身份AddUserToRole不起作用

當Configuration.AutoDetectChangesEnabled = false爲的DbContext,其用於的UserManager和RolesManager,

代碼userManager.AddUserToRole(用戶, 「TestRole」)返回成功,但沒有在分貝已更新。

有沒有辦法解決這個問題而不創建自己的UserManager實現和UserStorage實現?

+0

您是否最初創建「TestRole」? –

+0

我只能看到的解決方案是爲UserManager創建一個具有AutoDetectChangesEnabled = true的單獨DbContext; – Vindberg

回答

0

我使用的遷移,在我的種子的方法創建的角色是這樣的:

private void CreateRole(string roleName) 
{ 
    var rm = new RoleManager<IdentityRole>(
    new RoleStore<IdentityRole>(new AppDbContext())); 
    var idResult = rm.Create(new IdentityRole(roleName)); 
} 

並添加角色給用戶:

var userStore = new UserStore<AppUser>(new AppDbContext()); 
var manager = new UserManager<AppUser>(userStore); 
var user = manager.FindByName(userName); 
if (user == null){ 
    manager.Create(new AppUser { UserName = userName }, password); 
} 

user = manager.FindByName(userName); 
manager.AddToRole(user.Id, roleName); 

它正確地更新數據庫。

0

我的環境:
項目腳手架選擇了個人用戶帳戶。它採用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命令以重新爲數據庫創建種子。