2017-02-07 3 views
0

다른 dbcontext를 만들지 않고 override 메서드 내에서 사용자 지정 테이블에 액세스 할 수 있도록 UserStore/UserManager를 확장 할 수 있습니까?Asp.Net Identity - 사용자 지정 데이터베이스 액세스 UserManager

저는 Identity와 통합 된 레거시 데이터베이스를 만들고 있습니다. 최근에 우리는 Users 테이블과 일대일 관계가있는 새로운 테이블 인 Clients를 데이터베이스에 추가했습니다. 원하는 것은 UserManager 클래스의 FindAsync 메서드를 재정 의하여 기본 메서드를 호출하고 사용자를 부여한 다음 테이블에 저장된 사용자의 클라이언트 ID를 기반으로 클라이언트 이름을 가져 와서 사용자 모델에 삽입하는 것입니다.

다음은 내가 시도한 것입니다. 그러나, 나는 이것이 잘못된 접근이라고 생각하며, 내가하려고하는 것을 올바르게 적용하는 방법에 대한 제안을 원합니다.

public override async Task<ApplicationUser> FindAsync(string userName, string password) 
{ 
    ApplicationUser user = await base.FindAsync(userName, password); 

    if (user != null && user.ClientID != null) 
    { 
     using (var ctx = new ApplicationDbContext(HostPage.ConnectionString)) 
     { 
      user.Client = ctx.Clients.Where(p => p.ClientID == user.ClientID).FirstOrDefault(); 
     } 
    } 

    return user; 
} 

답변

0

당신은 따라서 하나의 쿼리를 실행하여 테이블에 가입 수행 base.FindAsync()에서 SQL을 수정할 수 있습니다.

+0

기본 클래스는 Microsfot.AspNet.Identity 네임 스페이스의 일부이므로 수정할 수 없습니다. 어떻게해야할까요? – InvaderZim

+0

그런 경우'base.FindAsync()'를 호출하지 않고 직접 구현할 수 있습니다. 그렇지 않으면 솔루션은 괜찮습니다. – Sherlock

+0

Gotcha, 그래서 주위에 마법의 방법이 있지만 사용자 지정 저장소를 사용하여 직접 데이터베이스 호출을 구현하고 무엇을하지? – InvaderZim

관련 문제