2014-01-19 4 views
2

초기 사용자, 역할을 삽입하고 ASP.NET MVC 5 ID를 사용하여 역할에 사용자를 연결하려고합니다.ASP.NET MVC 5 Identity AddUserToRole이 작동하지 않습니다.

UserManager 및 RolesManager에 사용 된 DbContext,

코드 userManager.AddUserToRole에 대한 거짓 Configuration.AutoDetectChangesEnabled = (사용자가 "TestRole")이 성공을 반환

,하지만 아무것도 DB에 업데이트되었습니다.

고유 한 UserManager 구현 및 UserStorage 구현을 만들지 않고도이 문제를 해결할 수있는 방법이 있습니까?

private void CreateRole(string roleName) 
{ 
    var rm = new RoleManager<IdentityRole>(
    new RoleStore<IdentityRole>(new AppDbContext())); 
    var idResult = rm.Create(new IdentityRole(roleName)); 
} 

그리고 사용자에게 역할을 추가 : 내가 마이그레이션 내 종자 방법을 사용하고

+0

처음에 "TestRole"을 만드시겠습니까? –

+0

내가 볼 수있는 유일한 솔루션은 AutoDetectChangesEnabled = true 인 UserManager에 대한 별도의 DbContext를 만드는 것입니다. – Vindberg

답변

0

나는 역할이 방법으로 만들

var userStore = new UserStore<AppUser>(new AppDbContext()); 
var manager = new UserManager<AppUser>(userStore); 
var user = manager.FindByName(userName); 
if (user == null){ 
    manager.Create(new AppUser { UserName = userName }, password); 
} 

user = manager.FindByName(userName); 
manager.AddToRole(user.Id, roleName); 

을 그리고 그것은 제대로 데이터베이스를 업데이트합니다.

0

내 환경 :
개인 사용자 계정으로 스캐 폴딩 된 프로젝트가 선택되었습니다. 내가 (IdentityModel.cs에서 생성됩니다 아니 ApplicationDbContext) 내 PrimaryApplicationContext

protected override void Seed(MYProject.DAL.PrimaryApplicationContext context) 
     { 
      ApplicationDbContext userContext = new ApplicationDbContext(); 
      var rm = new RoleManager<IdentityRole>(new RoleStore<IdentityRole>(userContext)); 
      var um = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(userContext)); 

      if (!rm.RoleExists("Developer")) 
      { 
       var idResult = rm.Create(new IdentityRole("Developer")); 
      } 

      if (um.FindByName("Super") == null) 
      { 
       um.Create(new ApplicationUser() { UserName = "Super" } , "Password"); 
       ApplicationUser user = um.FindByName("Super"); 
       um.AddToRole(user.Id, "Developer"); 
      } 

     } 

경우에는 다음과 같이

내 종자 방법은 외모 코드 - 우선 마이그레이션을 가능 1.0 ASP.net MVC5, ID를 사용한다 응용 프로그램에서 응용 프로그램 데이터와 동일한 컨텍스트를 사용하여 사용자 데이터를 저장하면 새 ApplicationDbContext를 만들 필요가 없으므로 seed 메서드에 전달 된 컨텍스트를 사용할 수 있습니다.

1 단계 - ID 데이터를 저장하는 데 사용되는 컨텍스트 중 하나의 인스턴스를 만듭니다.

2 단계 RoleManager의 인스턴스를 만들고 1 단계 컨텍스트로 UserManager를 만듭니다. 당신은 "역할 관리자는 사용할 수 없습니다"와 같은 오류가 발생하면 *, 당신은 노드 아래, 당신의 Web.config에

<roleManager enabled="true" /> 를 추가해야합니다.

3 단계 - 역할 관리자를 사용하여 역할이 이미 존재하는지 확인합니다 (작성하지 않은 경우).

4 단계 사용자 관리자를 사용하여 사용자가 이미 존재하는지 확인합니다 (작성하지 않은 경우).

5 단계 일단 역할과 사용자가 생성되면 데이터베이스에서 사용자를 검색하십시오 (역할에 추가하려면 사용자 ID가 필요합니다). * 사용자와 역할 관리자가 메소드를 작성하면이를 인식하십시오. 신원 결과 개체가 아닌 역할/사용자 개체, 그래서 다음 코드는

var result = usermanager.Create(new ApplicationUser()... 
usermanager.AddToRole(result.Id, "Developer"); 

단계 6 역할에 검색된 사용자를 추가 할 수 UserManager를 사용하여 유효하지 않습니다. 7 - 패키지 - 관리자 - 콘솔에 Update-Database 명령을 실행하여 데이터베이스를 다시 시드하십시오.

관련 문제