2012-06-01 4 views
1

데이터베이스에서 모든 데이터를 가져 오는 데 문제가 있습니다. 무엇이 잘못되었는지 잘 모릅니다. 거의 모든 것이 나에게 새롭습니다. .MVC4 EF4.3 자식 개체가 DB에서 가져 오지 않았습니다

나는 SO 검색 및 광산 꽤 비슷한 것 같다 다음과 같은 질문을 발견했습니다 - Repository Pattern for Entity Framework and Children Objects

I've looked at the answer which contained this link을하지만 나는이 작업을 얻기 위해 사투를 벌인거야.

캠페인을 반환하는 캠페인 리포지토리가 있습니다. 예상대로 Audit 목록을 반환하지만 Audits에는 주석 또는 CampaignAction이 없습니다. DB에 모든 계단식 객체를 꺼내기 위해 필요한 특별한 것이 있습니까? 어떤 도움

감사

public override Campaign Get(int id) 
    { 
     var query = Context.Campaigns.Include(x => x.Audits) 
            .FirstOrDefault(c => c.CampaignId == id); 
     if (query != null) 
      Logger.Trace(query.ToString()); 
     return query; 
    } 

내 캠페인 클래스

public class Campaign 
{ 
    public Campaign() 
    { 
     Audits = new Collection<Audit>(); 
    } 

    public int CampaignId { get; set; } 

    [StringLength(40, ErrorMessageResourceType = typeof(Resources.Resources), ErrorMessageResourceName = "CampaignModel_Name_StringLength")] 
    [Required(ErrorMessageResourceType = typeof(Resources.Resources), ErrorMessageResourceName = "CampaignModel_Name_Required")] 
    [Display(Name = "CampaignModel_Name", ResourceType = typeof(Resources.Resources))] 
    public string Name { get; set; } 

    public ICollection<Audit> Audits { get; set; } 
} 

그리고 내 감사 클래스

public class Audit 
{ 
    public Audit() 
    { 
     Comments = new Collection<Comment>(); 
    } 

    public int AuditId { get; set; } 

    [Required(ErrorMessageResourceType = typeof(Resources.Resources), ErrorMessageResourceName = "Audit_CampaignAction_Required")] 
    [Display(Name = "Audit_CampaignAction", ResourceType = typeof(Resources.Resources))] 
    public CampaignAction Action { get; set; } 

    [Required(ErrorMessageResourceType = typeof(Resources.Resources), ErrorMessageResourceName = "Audit_UserName_Required")] 
    [Display(Name = "Audit_UserName_Content", ResourceType = typeof(Resources.Resources))] 
    public string UserName { get; set; } 

    [Required(ErrorMessageResourceType = typeof(Resources.Resources), ErrorMessageResourceName = "Audit_TimeStamp_Required")] 
    [Display(Name = "Audit_TimeStamp", ResourceType = typeof(Resources.Resources))] 
    public DateTime TimeStamp { get; set; } 

    public ICollection<Comment> Comments { get; set; } 

    [JsonIgnore] 
    public virtual ICollection<Campaign> Campaigns { get; set; } 
} 
+0

당신이이 – Kane

답변

2

만큼 당신이 열망로드를 사용할 때이 , 너 하하. 데이터베이스에서로드하려는 모든 항목에 대해 Include()에 전화하십시오. 이 규칙은 하위 항목 (감사)에 적용되지만 손자 (작업 및 설명)에도 적용됩니다.

일반적으로 간단한 도트 표기법을 사용하여 손자를 포함 할 수 있지만 자식 엔터티가 모음 인 경우 Select() 메서드를 사용하는 특수 구문이 있습니다.

var query = Context.Campaigns.Include(x => x.Audits) 
          .Include(x => x.Audits.Select(a => a.Comments)) 
          .Include(x => x.Audits.Select(a => a.Action)) 
          .FirstOrDefault(c => c.CampaignId == id); 
+0

브릴리언트은'Include'를 사용하지 않고 데이터를 얻을 수있는 쉬운 방법이어야한다으로 virtual''등의 방법을 표시 봤어처럼 쿼리가 보일 것입니다, 감사합니다 백만 – Neil

관련 문제