У меня есть общий метод базового хранилища для поиска (обрезается для ясности):EF - почему иногда рвутся нагрузки, иногда ленивые нагрузок
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 полностью нагрузки ed (все связанные объекты загружаются).
НО, у меня есть еще один класс (базовый уровень услуг класса), что делает тот же SearchFor вызов, пока он не загружает соответствующие объекты:
IQueryable<TRepository> dbEntity = _repository.SearchFor(x => x.Id == result.Value);
от обоих вызовов я пытаюсь создать которая использует значения свойств из связанных объектов. Зачем загружать их в одном случае, а не в другом? Это тот же объект TimeDetail, тот же базовый класс репозитория?
Изображение того, что вы видите в отладчике. Почему некоторые связанные с ними объекты будут загружены (например, фонда и TimeDetailStatus), а другие нет (как OrderHeader или Заказчик)
UPDATE
Я смотрел на запросы генерируются и они оба кажутся похожими, т.е. они не присоединяются к другим таблицам ... так что возможно, что контекст уже содержит некоторые кешированные строки из некоторых связанных объектов, как они становятся включенными?
Что означает название вопроса? – Slauma
обновлено, мы надеемся, что оно яснее –
Может быть, timeDetails2 будет восстановлен в цепочке запросов и ранее уже извлеченных объектов? – LukLed