0

메신저 기능을 가진 저장소에서 "붙여 넣기"페치,하지만 내가 붙여 넣기 가져올 때 포함되어야하는 개체 액세스 할 수 없습니다. (Paste.FilterGroup.Ads).저장소를 사용하여 entityframework에 객체를 포함하는 방법은 무엇입니까?

내 저장소 기능 :

public T Find<T>(Expression<Func<T, bool>> predicate) where T : class 
    { 
     return Context.Set<T>().FirstOrDefault<T>(predicate); 
    } 

그리고 나는 이것을 시도 내 코드에서

.

   oPaste = _repository.Find<Paste>(x => x.PasteID == oPaste.PasteID); 

      if (oPaste.FilterGroup != null) 
      { 
       _log.Debug("FilterGroup: " + oPaste.FilterGroup.Name); 

       if (oPaste.FilterGroup.Ads != null && oPaste.FilterGroup.Ads.Count() > 0) 
       { 
        _log.Debug("FINALLY"); 
       } 
       else 
       { 
        _log.Debug("Paste " + oPaste.PasteID + " has no ads"); 
       } 
      } 
      else 
      { 
       _log.Debug("Paste " + oPaste.PasteID + " has no filtergroup"); 
      } 

편집 : 붙여 넣기 클래스는 교체해야합니다

public virtual FilterGroup FilterGroup { get; set; } 

FilterGroup 클래스

public virtual IEnumerable<Ad> Ads { get; set; } 

답변

0

을 포함 포함

public virtual IEnumerable<Ad> Ads { get; set; } 

public virtual ICollection<Ad> Ads { get; set; } 

또는 ICollection<T>을 구현하는 다른 컬렉션 유형. IEnumerable<T>이 아니므로 EF는 탐색 속성으로이를 무시합니다.

컨텍스트가 살아있는 한 탐색 속성은 느린 로딩으로로드해야합니다. 그래서 다음과 같이 호출 다음

using System.Data.Entity; // required for the lambda version of Include 

// ... 

public T Find<T>(Expression<Func<T, bool>> predicate, 
    params Expression<Func<T, object>>[] includes) where T : class 
{ 
    IQueryable<T> query = Context.Set<T>(); 

    if (includes != null) 
     foreach (var include in includes) 
      query = query.Include(include); 

    return query.FirstOrDefault<T>(predicate); 
} 

을 그리고 :

당신은 또한 당신의 저장소에 열망로드를 지원할 수

oPaste = _repository.Find<Paste>(x => x.PasteID == oPaste.PasteID, 
    x => x.FilterGroup.Ads); 
+0

감사합니다! 그게 문제를 해결했습니다! –

관련 문제