ASP.NET 5 MVC 6和Entity Framework 7問題

asp.net-core asp.net-core-mvc c# entity-framework-core

我們不能將Owin和Entity框架7一起添加。當我們這樣做時,Microsoft.AspNet.Identity.core 2.0.0.0和Microsoft.AspNet.Identity 3.0.0 Beta1之間將存在歧義。

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

面對此問題後,我刪除了Owin引用並使用Microsoft.AspNet.Identity 3.0.0和EF 7創建了UserManager,但UserManager.AddToRoleAsync(user,roleName)始終拋出異常,如下所示: -

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

熱門答案

我遇到了這個問題。一個對我有用的解決方案是通過UserManager獲取用戶然後添加角色:

代替

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

使用以下內容

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



許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因