问题描述
|
我有一个存储库来管理ѭ0上的操作,该库具有大量关联的实体,所以我定义了。不想加载所有内容,因此我有
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();
}
解决方法
你可以实现这样的事情
知识库库
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\");
}
,将LazyLoadingEnabled设置为true时,您不再需要直接显式加载ComplaintSubType。每当有东西碰到该属性时,EF就会为您加载它。另外,您可以使用Include(\“ ComplaintSubType \”)方法与ComplaintType同时加载它。这将是最好的选择。
HTH。