2015-04-05 115 views
4

我們不能將Owin和Entity framework 7一起添加。因爲我們這樣做,那麼Microsoft.AspNet.Identity.core 2.0.0.0和Microsoft.AspNet.Identity 3.0.0 Beta1之間將存在不明確之處。AspNet.Identity 3.0.0 Beta1ASP.NET 5 MVC 6和Entity Framework 7問題

因此,我無法在我的應用程序中實現角色提供程序來管理用戶角色。

面臨這個問題後,我取出Owin引用和使用的UserManager Microsoft.AspNet.Identity 3.0.0和EF 7,但UserManager.AddToRoleAsync(用戶,角色名)總是拋出異常,如下創建: -

InvalidOperationException:實體類型'Mozaics.DAL.Models.ApplicationUser'的實例無法跟蹤,因爲此類型的另一個 實例具有相同的密鑰已被跟蹤。對於 新實體考慮使用IIdentityGenerator生成唯一的 關鍵值。

代碼片段是這樣的。

public async Task<ActionResult> RoleAddToUser(string UserName, string RoleName) 
    { 
     var user = context.Users.Where(u => u.UserName.Equals(UserName, StringComparison.CurrentCultureIgnoreCase)).FirstOrDefault(); 

     var result = await UserManager.AddToRoleAsync(user, RoleName); 

     ViewBag.ResultMessage = "Role created successfully !"; 
     var list = context.Roles.OrderBy(r => r.Name).ToList().Select(rr => new SelectListItem { Value = rr.Name.ToString(), Text = rr.Name }).ToList(); 
     ViewBag.Roles = list; 

     return View("ManageUserRoles"); 
    } 
+0

在Microsoft.AspNet .Identity.Core庫的方法是這樣的 UserManager.AddRoleToUserAsync(User.Id,RoleName) – sanjaypujari 2015-04-05 15:22:26

+0

你是否是親屬d足以向我們提供您的'project.json'以及您的項目屬性中的運行時和'dnvm list'的輸出。謝謝 – 2015-11-26 14:05:30

回答

0

@sanjaypujari

剛剛嘗試一個:

var user = await context.FindByNameAsync(UserName); 
ApplicationUser appuser = (ApplicationUser)user; 
var result = await UserManager.AddToRoleAsync(appuser, RoleName); 

當這樣執行,ApplicationUser不應該被跟蹤的兩倍。 如果您想更新ApplicationUser,相同的事情也會有幫助。

0

我遇到了這個問題。爲我工作的一個解決方案是,通過的UserManager獲得用戶,然後添加角色:的

,而不是

var user = context.Users.Where(u => u.UserName.Equals(UserName, StringComparison.CurrentCultureIgnoreCase)).FirstOrDefault(); 
var result = await UserManager.AddToRoleAsync(user, RoleName); 

使用以下

var user = await UserManager.FindByNameAsync(UserName); 
var result = await UserManager.AddToRoleAsync(user, RoleName);