2011-05-26 15 views
0

私は多くの関連エンティティを持つComplaintTypesの操作を管理するリポジトリを持っています。すべてをロードしたくないので、私はLazyLoadingEnabled = true;を持っています。しかし、私は関連するエンティティを1つロードしたいと思っています:ComplaintSubType関連するエンティティを1つだけロードする

これは私のために働いていますが、もっと良い方法があると思いますか?ありがとう!更新

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

あなたが何かを実装することができ...

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

LazyLoadingEnabledではtrueに設定され、あなたは、もはや明示的に直接ComplaintSubTypeをロードする必要がありますする必要はありません必要があります。何かがプロパティに触れるたびに、EFはあなたのためにそれをロードする必要があります。代わりに、Include( "ComplaintSubType")メソッドを使用して、ComplaintTypeと同時にロードすることもできます。これはここで最善の選択肢になります。

HTH。この

がComplaintTypeRepositoryで

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(); 
} 

をRepositoryBaseよう

+0

は申し訳ありませんが、私はn層のアーチを使用しています言及するのを忘れてしまいました。したがって、エンティティは添付されません。 – MisterIsaak

+0

それでは、あなたに何を伝えるべきかを完全に理解するために、基本的なアーキテクチャー、GetAllとGetSingleメソッドをもっと見る必要があります。 –