2011-05-26 2 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 установлен верно, вы больше не должны иметь явно загружать ComplaintSubType непосредственно; всякий раз, когда что-то затрагивает свойство, EF должен загрузить его для вас. В качестве альтернативы вы можете использовать метод Include («ComplaintSubType»), чтобы загрузить его одновременно с ComplaintType; это был бы лучший вариант здесь.

HTH.

+0

К сожалению, забыл упомянуть, что я использую п-уровневую арку. Таким образом, объект не привязан. – MisterIsaak

+0

ОК, то для того, чтобы полностью понять, что вам сказать, мне нужно будет увидеть еще некоторые из вашей базовой архитектуры, методы GetAll и GetSingle ... –

Смежные вопросы