2016-11-17 117 views
1

我正在嘗試構建簡單的方法(只是爲了測試它是如何工作的),它會授予我(當前用戶)一個新角色(我現在只有1個角色,所以我可以通過簡單查詢)UserManager添加角色

public ActionResult Index() 
{ 
    using (var db = new MyDbContext()) 
    { 
     var manager = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(db)); 
     var id = User.Identity.GetUserId(); 
     var role = db.AspNetRoles.First(); 
     manager.AddToRole(id, role.Name); 
    } 

    return View(); 
} 

我收到此錯誤:The entity type ApplicationUser is not part of the model for the current context.manager.AddToRole(id, role.Name);線。我是ASP.NET的新手,所以我不太瞭解它的基礎結構,但是這個代碼在有關用戶註冊的問題中被提及了很多次(這裏是堆棧)。

順便說一下,作爲我的目標,我必須實施角色系統以使用數據庫優先遷移系統進行項目,這個manager.AddToRole(id, role.Name);代碼會在我的數據庫中添加記錄嗎?

+0

什麼是HRMEntities?它是從什麼繼承的? – DavidG

+0

你沒有任何機會將您的ApplicationUser表重命名爲自定義,是嗎?此外,就像DavidG所暗指的那樣,您確定您的HRMEntities數據庫上下文是從IdentityDbContext 繼承的嗎? – Overhed

+0

Sry,還沒有修復它是我的連接字符串的名稱。將其更改爲「MyDbContext」。 – rainbowShiningUnicorn

回答

0

下面是一個存根(不完全),顯示增加一個新創建的用戶角色:

  DbContext context = db; 
      IdentityResult ir; 
      var um = new UserManager<ApplicationUser>(
       new UserStore<ApplicationUser>(context)); 

      ApplicationUser au = new ApplicationUser(); 
      au = db.Users.FirstOrDefault(u => u.UserName == uname); 

      if (au == null) 
      { 
       // add the user 
       var user = new ApplicationUser() 
       { 
        UserName = TrustNoOne("name", uname), 
        Email = TrustNoOne("email", uemail), 
        ProperUserName = TrustNoOne("propername", upropname) 
       }; 

       // create a password for the user 
       ir = um.Create(user, upass); 

       // assign the user to a role 
       if (User.IsInRole(urole) != true) 
       { 
        ir = um.AddToRole(user.Id, urole); 
       } 
      } 

請注意,UNAME,uemail,upropname,upass和urole傳遞給方法,其中的參數此代碼生活。此外,您可以忽略TrustNoOne位(這只是我使用的)。