我有一个用于搜索的通用基础存储库方法(为清楚起见进行了修剪):
public class Repository<TRepository> : IRepository<TRepository>
where TRepository : class, IEntity, new()
{
public virtual IQueryable<TRepository> SearchFor(Expression<Func<TRepository, bool>> predicate, Expression<Func<TRepository, bool>> orderbylinq = null)
{
if (orderbylinq == null)
{
return DbSet.Where(predicate);
}
else
{
return DbSet.Where(predicate).OrderBy(orderbylinq);
}
}
}
我有一个派生的存储库类:
public class TimeDetailRepository : Repository<TimeDetail>
在我的服务层中,我有一个调用 SearchFor 方法的类:
private TimeDetailRepository _timeDetailRepository;
public ManageTimeDetailsAppServ()
: base(new TimeDetailRepository())
{
_timeDetailRepository = new TimeDetailRepository();
}
IQueryable<TimeDetail> timeDetails2 = _timeDetailRepository.SearchFor(
x => x.Id == 3214);
在这种情况下,timeDetails2 已完全加载(已加载所有相关实体)。
但是,我有另一个类(基础服务层类)进行相同的 SearchFor 调用,但它不加载相关实体:
IQueryable<TRepository> dbEntity = _repository.SearchFor(x => x.Id == result.Value);
从这两个调用中,我试图创建一个利用相关实体的属性值的视图模型。为什么它会在一种情况下加载它们而不是另一种?这是同一个实体 TimeDetail,同一个基础存储库类?
您在调试器中看到的图像。为什么会加载一些相关实体(如 Facility 和 TimeDetailStatus)而其他不加载(如 OrderHeader 或 Customer)
更新
我查看了正在生成的查询,它们看起来都很相似,即它们没有加入其他表......所以上下文是否可能已经包含来自某些相关实体的一些缓存行,它们就是这样被包括在内?