ASP.NET 5 MVC 6和Entity Framework 7问题
问题描述:
我们不能将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");
}
答
@sanjaypujari
刚刚尝试一个:
var user = await context.FindByNameAsync(UserName);
ApplicationUser appuser = (ApplicationUser)user;
var result = await UserManager.AddToRoleAsync(appuser, RoleName);
当这样执行,ApplicationUser不应该被跟踪的两倍。 如果您想更新ApplicationUser,相同的事情也会有帮助。
答
我遇到了这个问题。为我工作的一个解决方案是,通过的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);
在Microsoft.AspNet .Identity.Core库的方法是这样的 UserManager.AddRoleToUserAsync(User.Id,RoleName) – sanjaypujari 2015-04-05 15:22:26
你是否是亲属d足以向我们提供您的'project.json'以及您的项目属性中的运行时和'dnvm list'的输出。谢谢 – 2015-11-26 14:05:30