2013-10-02 4 views
4

특정 값으로 탐색 속성을 채우려면 어떻게해야합니까?탐색 속성의 탐색 속성 채우기

아래에 정의 된 Game, UserTeam, User의 세 가지 모델이 있습니다. 나는 IEnumerable 모델을 사용하는 면도기 뷰를가집니다. 이보기는 게임을 반복하며 해당 루프 내에서 UserTeams를 반복합니다. 여태까지는 그런대로 잘됐다.

UserTeam 루프 내에서 사용자 속성에 액세스하려고하지만 null입니다. 각 UserTeam 객체에 대한 사용자 탐색 속성을 채우려면 어떻게해야합니까? UserTeam 모델에 매개 변수가있는 생성자가 필요합니까?

모델

게임을 반환 내 면도기보기
public class Game 
{ 
    public Game() 
    { 
     UserTeams = new HashSet<UserTeam>(); 
    } 

    public int Id { get; set; } 
    public int CreatorId { get; set; } 
    public string Name { get; set; } 
    public int CurrentOrderPosition { get; set; } 

    public virtual UserProfile Creator { get; set; } 
    public virtual ICollection<UserTeam> UserTeams { get; set; } 
} 


public class UserTeam 
{ 
    public UserTeam() 
    { 
     User = new UserProfile(); 
    } 

    public int Id { get; set; } 
    public int UserId { get; set; } 
    public int GameId { get; set; } 
    public int OrderPosition { get; set; } 

    public virtual UserProfile User { get; set; } 
    public virtual Game Game { get; set; } 
    public virtual IList<UserTeam_Player> UserTeam_Players { get; set; } 

} 

public class UserProfile 
{ 
    [Key] 
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)] 
    public int UserId { get; set; } 
    public string UserName { get; set; } 
    public string test { get; set; } 

    public UserProfile() 
    { 
     UserTeams = new HashSet<UserTeam>(); 
    } 

    public virtual ICollection<UserTeam> UserTeams { get; set; } 
    [ForeignKey("CreatorId")] 
    public virtual ICollection<Game> Games { get; set; } 
} 

루프 (모델을 IEnumerable입니다) 내 저장소에

@foreach (var item in Model) { 
     @foreach (var userteam in item.UserTeams) { 
         @Html.ActionLink("Join game as"+userteam.User.UserName, "JoinGame", new { gameid = item.Id, userid=userteam.UserId }) 
     } 
} 

방법

public IEnumerable<Game> GetAllGames() 
    { 
     using (DataContext) 
     { 
      var gm = DataContext.Games.Include("UserTeams").ToList(); 
      return gm; 
     } 
    } 
+0

Thewads 대답은 @Slaumas 코멘트와 함께 문제를 해결했습니다. GameTemplator에서 UserTeams를 인스턴스화해도 UserTeam 생성자에서 사용자를 인스턴스화하는 것과 동일한 문제가 발생하지 않는 이유는 여전히 남아 있습니다. – jag

답변

5

당신이 포함해야 귀하의 저장소 방법. 당신이 열망 로딩을 사용하는 경우 그것은 내 쿼리에 대해 LINQ를 사용하지 않고이 작업을 수행하지 않은

var gm = DataContext.Games 
        .Include(x => x.UserTeams) 
        .Include(x => x.UserTeams.Select(y => y.User)) 
        .ToList(); 

같은 것,하지만 난 뭔가처럼 될 것입니다 가정 희망이 도움이

var gm = DataContext.Games.Include("UserTeams.User").ToList(); 

당신이 밖으로

+0

감사하지만이 사용자는 아직 채워지지 않은 User를 반환합니다. 두 버전 모두 시도했습니다. – jag

+1

@jag : Thewads의 대답은 올바른 방법입니다. 하지만 또 다른 문제가 있습니다 :'User = new UserProfile();'을'UserTeam' 생성자에서 제거해야합니다. 로드 된 사용자는'User' 속성에 할당되지 않고 초기화되지 않은 사용자가됩니다. 나는 당신이 그 선을 제거 할 때 작동 할 것이라고 믿습니다. – Slauma

+0

@Slauma 감사합니다 -이게 문제를 해결했습니다. – jag