【问题标题】:ASP.NET 5 MVC 6 and Entity Framework 7 issuesASP.NET 5 MVC 6 和 Entity Framework 7 问题
【发布时间】:2015-06-10 02:38:41
【问题描述】:

我们不能将 Owin 和 Entity framework 7 一起添加。当我们这样做时,Microsoft.AspNet.Identity.core 2.0.0.0 和 Microsoft.AspNet.Identity 3.0.0 Beta1 之间将存在歧义

因此我无法在我的应用程序中实现角色提供程序来管理用户角色。

在遇到这个问题后,我删除了 Owin 引用并使用创建了 UserManager Microsoft.AspNet.Identity 3.0.0 和 EF 7 但 UserManager.AddToRoleAsync(user, roleName) 总是抛出如下异常:-

InvalidOperationException:无法跟踪实体类型“Mozaics.DAL.Models.ApplicationUser”的实例,因为另一个 已在跟踪具有相同密钥的此类实例。为了 新实体考虑使用 IIdentityGenerator 生成唯一的 关键值。

代码 sn-p 是这样的。

 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");
    }

【问题讨论】:

  • 在 Microsoft.AspNet.Identity.Core 库中的方法是这样的 UserManager.AddRoleToUserAsync(User.Id, RoleName)
  • 您能否向我们提供您的project.json 以及项目属性中的运行时和dnvm list 的输出。谢谢

标签: c# asp.net-core asp.net-core-mvc entity-framework-core


【解决方案1】:

@sanjaypujari

试试那个:

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

当这样执行时,ApplicationUser 不应被跟踪两次。 如果您想更新 ApplicationUser,同样的事情也会有所帮助。

【讨论】:

    【解决方案2】:

    我遇到了这个问题。一种对我有用的解决方案是通过 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 );
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-08-13
      • 2017-12-30
      • 1970-01-01
      • 2023-03-05
      • 1970-01-01
      • 2015-04-28
      • 2013-12-25
      相关资源
      最近更新 更多