2013-04-09 2 views
0

사용자 지정 역할 공급자를 만드는 데 사용했습니다.asp.net MVC3 LINQ 식

내 프로젝트 - asp.net의 MVC3, 엔티티 프레임 워크 4

는 GetRolesForUser 방법에 문제가 있습니다.

사용자 지정 RoleProvider - GetRolesForUser 방법

// The user to return a list of roles for. 
    public override string[] GetRolesForUser(string userAccount) 
    { 
     var userId = userRepository.GetUser(userAccount).UserId; 

     var roleIds = from ur in usersInRoleRepository.UsersInRoles 
        where ur.UserId == userId 
        select ur.RoleId; 

     var roleNames = from r in roleRepository.Roles 
         where roleIds.Contains(r.RoleId) 
         select r.RoleName; 


     if (roleNames != null) 
     { 
      **return roleNames.ToArray(); // here Error** 
     } 
     else 
     { 
      return new string[0]; 
     } 
    } 

오류 메시지 : 지정된 LINQ 표현이 다른 문맥과 관련된 질의에 대한 참조를 포함합니다.

이 코드에 문제가 있는지 여부는 알 수 없습니다.

도와주세요.

사용자 엔티티

public class User 
{ 
    public Guid UserId { get; set; } 
    public string UserAccount { get; set; } 
    public string Password { get; set; } 
    public string UserEmail { get; set; } 
    public DateTime JoinDate { get; set; } 
    public DateTime LoginDate { get; set; } 
} 

역할 법인

public class Role 
{ 
    public Guid RoleId { get; set; } 
    public string RoleName { get; set; } 
    public DateTime CreateDate { get; set; } 
} 

UsersInRole 법인은

public class UsersInRole 
{ 
    public Guid UserId { get; set; } 
    public Guid RoleId { get; set; } 
    public DateTime SetDate { get; set; } 
} 

답변

0

당신은 단일 쿼리에서 다른 컨텍스트와 연결된 쿼리를 만들 캔트. 롤 ID linq 코드를 배열로 변환하여 지연로드가 가능하도록 변경하십시오.

var roleIds = (from ur in usersInRoleRepository.UsersInRoles 
       where ur.UserId == userId 
       select ur.RoleId).ToArray(); 
+0

감사합니다. 문제가 해결되었습니다. – user2214027

+0

@ user2214027 그런 다음 답을 오른쪽으로 표시하십시오. :) – Alex