2011-05-26 42 views
0

我有存儲庫來管理ComplaintTypes上的操作,它有大量的關聯實體,所以我定義了。不想加載所有內容,因此我有LazyLoadingEnabled = true;。然而,我確實想要加載一個關聯的實體,例如:ComplaintSubType只加載一個關聯的實體

這對我有用,但我在想有更好的方法嗎?謝謝!

namespace Complaint.Dal.Repositories 
{ 
    public class ComplaintTypeRepository : RepositoryBase<ComplaintType>, IComplaintTypeRepository 
    { 
     #region ctor 

     /// <summary> 
     /// ctor 
     /// </summary> 
     /// <param name="objectContext"></param> 
     public ComplaintTypeRepository(IObjectContext objectContext) 
      : base(objectContext) 
     { 
      //Lazy Load so we don't get bloated data 
      objectContext.LazyLoadingEnabled = true; 
     } 

     #endregion 

     #region Implementation of IComplaintRepository 

     public IEnumerable<ComplaintType> GetAllComplaintTypes() 
     { 
      //Load the related SubTypes 
      var result = GetAll(t => t.PK_Type_Id); 
      foreach (var complaintType in result) 
      { 
       complaintType.ComplaintSubType.Load(); 
      } 
      return result; 
     } 

     public ComplaintType GetComplaintType(int typeId) 
     { 
      var result = GetSingle(t => t.PK_Type_Id == typeId); 
      result.ComplaintSubType.Load(); 
      return result; 
     } 

     public void UpdateComplaintType(ComplaintType entity) 
     { 
      Attach(entity); 
     } 

     #endregion 
    } 
} 

更新時間:

public IEnumerable<T> GetAll<TKey, TType>(Expression<Func<T, TKey>> orderBy) 
{ 
    var ret = ObjectSet; 
    //set Orderby 
    ret.OrderBy(orderBy); 
    return ret.ToList(); 
} 

回答

1

您可以實現這樣的事情

RepositoryBase

public virtual IQueryable<TEntity> BuildQuery(IQueryable<TEntity> query) 
{ 
    return query; 
} 

public IQueryable<TEntity> GetQuery() 
{ 
    return BuildQuery(_objectSet); 
} 

public IEnumerable<T> GetAll<TKey, TType>(Expression<Func<T, TKey>> orderBy) 
{ 
    var ret = GetQuery(); 
    //set Orderby 
    ret.OrderBy(orderBy); 
    return ret.ToList(); 
} 

在ComplaintTypeRepository ...

public override IQueryable<TEntity> BuildQuery(IQueryable<TEntity> query) 
{ 
    return query.Include("ComplaintSubType"); 
} 
0

隨着LazyLoadingEnabled設置爲true,你應該不再需要有明確直接加載ComplaintSubType;每當有東西接觸到財產時,EF都會爲你加載它。或者,您可以使用Include(「ComplaintSubType」)方法將其與ComplaintType同時加載;這將是這裏最好的選擇。

HTH。

+0

對不起,忘了提,我使用的是n層拱。所以這個實體沒有附加。 – MisterIsaak 2011-05-26 20:32:31

+0

好的,那麼爲了完全理解要告訴你什麼,我需要看到更多的基礎架構,GetAll和GetSingle方法...... – 2011-05-26 23:28:53