ASP.NET 5 MVC 6 및 Entity Framework 7 문제

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

문제

Owin과 Entity Framework 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)는 항상 아래와 같이 예외를 throw합니다.

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는 합법적입니까? 예, 이유를 알아보십시오.