2015-04-05 128 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); 
相关问题