0

사용자를 가져 와서 그의 그룹을 얻는 기존 코드가 있습니다. 각 GroupEF5/6 내비게이션 속성의 내비게이션 속성을 포함합니다.

 User user = new FetchUserByUsernameServiceCommand(Username, Context).Execute(); 

     var groupList = user.JoinedGroups.ToList<Group>(); 

     return groupList; 

ImageUrl을 갖는 네비게이션 Image 속성을 갖는다.

은 내가 groupListImageGroup 각의를 Include하고 싶지만, 그것이 Context에 부착되지 않기 때문에 IncludeLis<Group> groupList 사용할 수 없습니다.

GroupImage 탐색 속성을 포함하려면 어떻게해야하나요?

+0

"그룹"모델에 대한 코드 스 니펫을 넣을 수 있습니까? – Sampath

답변

0

할 수 있습니다 중 하나을 포함하는 탐색 속성에 대한 표현식을 허용하도록 명령 클래스와 생성자를 확장 :을

User user = new FetchUserByUsernameServiceCommand(
    Username, Context, u => u.JoinedGroups.Select(g => g.Image)) 
    .Execute(); 

var groupList = user.JoinedGroups.ToList(); 
return groupList; 

을 또는 :

private string _userName; 
private MyContext _context; 
private Expression<Func<User, object>>[] _includes; 

public FetchUserByUsernameServiceCommand(string userName, 
    MyContext context, params Expression<Func<User, object>>[] includes) 
{ 
    _userName = userName; 
    _context = context; 
    _includes = includes; 
} 

public User Execute() 
{ 
    IQueryable<User> query = _context.Users; 
    if (_includes != null) 
    { 
     foreach (var include in _includes) 
      query = query.Include(include); 
    } 
    return query.SingleOrDefault(u => u.UserName); 
} 

당신과 같이이 부를 것이다 명시 적로드를 사용할 수 있습니다.

User user = new FetchUserByUsernameServiceCommand(
    Username, Context) 
    .Execute(); 

var groupList = Context.Entry(user).Collection(u => u.JoinedGroups).Query() 
    .Include(g => g.Image) 
    .ToList(); 

return groupList; 

첫 번째 옵션은 사용자 플러스 그룹 및 이미지가 단일 데이터베이스 요청에 함께로드된다는 의미에서 열심히로드하는 것입니다. 두 번째 옵션 (명시 적로드)은 명령 실행자에서 User 오브젝트 만로드하는 첫 번째 옵션과 해당 사용자의 그룹 및 이미지를로드하는 두 번째 데이터베이스 쿼리를 실행합니다.

관련 문제