2014-06-22 2 views
3

ASP.NET MVC 응용 프로그램에서 ASP.NET ID를 사용하고 있습니다. 내 문제는 역할에 사용자를 추가하는 동안 발생합니다. 예외는 없지만 um.AddToRole()의 결과로 db 엔트리가 AspNetUserRoles 테이블에 추가되지 않습니다. 내 작업 방법은 다음과 같습니다AddToRole() 메서드가 ASP.NET ID에서 db 항목을 가져 오지 않습니다.

private UserManager<ApplicationUser> um = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(new ApplicationDbContext())); 

은 무엇 응용 프로그램 동작의 종류의 이유가 될 수 있습니다

public ActionResult GrantAdmin(string id) 
    { 
     ApplicationUser user = um.FindById(id); 
     if (!rm.RoleExists("admin")) 
     { 
      rm.Create(new IdentityRole("admin")); 
     } 
     um.AddToRole(user.Id, "admin"); 
     return View((object)user.UserName); 
    } 

음이 UserManager 클래스의 목적은? 어떤 생각? 의 Web.config에서

public ApplicationDbContext() 
     : base("DefaultConnection") 
    { 
    } 

그리고 기본 연결 : ASP.NET 신원 작업 할 때

<add name="DefaultConnection" connectionString="Data Source=(LocalDb)\v11.0;AttachDbFilename=|DataDirectory|\aspnet-RecommendationPlatform-20140404055015.mdf;Initial Catalog=aspnet-RecommendationPlatform-20140404055015;Integrated Security=True" providerName="System.Data.SqlClient" /> 
+0

이것은 이상한 질문처럼 들릴 것입니다.하지만 실행 후 SQL Management Studio 데이터베이스 목록을 새로 고치셨습니까? 거기에 당신이 의도 한 것과 다른 DB를보고있을 가능성이 있습니다, 그리고 거기에 없다면 그것은 그것을 생성하고 그 안에 사용자/역할을 추가했습니다. 나는 그것이 나에게도 일어났기 때문에 이것을 언급한다. – Darren

+0

예, 그 가능성을 고려하고있었습니다. 그러나 나는 거기에서 그것을 전혀 볼 수 없다. 예외가없는 항목이 없으면 항목이 다른 곳에서 작성되고 있음을 알 수 있습니다. 그러나 왜 그런 식으로 동작하는지 알 수 없으며 올바른 db를 명시 적으로 @Darren으로 표시 할 수 있습니다. 이 문제를 어떻게 해결 했습니까? – magos

+0

DbContext를 생성하는 코드를 표시 할 수 있습니까? 여기서 사용하고자하는 연결 문자열의 이름을 명시 적으로 설정합니다. – Darren

답변

5

것이 중요하다

는 === 편집 === 그것은 내 DbContext입니다 많은 연산들이 최종 에러가 저장되는 결과 객체를 리턴한다는 것을 기억하십시오. 예외는 없습니다. 따라서 매번 작업을 마친 후에 결과 개체를 확인해야 성공할 수 있습니다. 이것은 롤뿐만 아니라 데이터를 데이터베이스에 저장하는 대부분의 메소드에 해당합니다. 그것이 작동하더라도 여전히 성공 여부를 테스트하고 결과가 성공하지 못하면 결국 예외를 throw해야합니다.

귀하의 의견에 따르면 문제는 잘못된 사용자 이름입니다.

+0

또한 오류는 문자열로 반환됩니다. 모든 가능한 오류를 쉽게 이해하고 처리하기 쉽도록 enum에 동의하면 codeplex에 게시 한 문제를 upvote하십시오 - https://aspnetidentity.codeplex.com/workitem/2222 – Stilgar