Допустим, у меня есть следующие модели:
public class Subject
{
private List<SubjectResponse> responses;
public int Id { get; private set; }
public IEnumerable<SubjectResponse> Responses => responses.ToList();
public void Foo()
{
// How do I check here if Responses fully has been loaded?
foreach (var response in Responses)
{
// ...
}
}
}
public class SubjectResponse
{
public int Id { get; private set; }
}
Как проверить, все ли ответы загружены в Foo()
? Я бы, вероятно, проверил if (Responses is null)
, но это не сработает во всех случаях.
Вот минимальный пример того, что может быть неправильным. В реальном приложении ответы могут быть загружены в совершенно другое место. Но h Это показывает, как EF может исправить ответы, чтобы он мог содержать записи, но не все записи.
public async Task Bar()
{
var response = await dbContext.SubjectResponses.SingleAsync(s => s.Id == 1);
var subject = await dbContext.Subjects.SingleAsync(s => s.Id == 1);
subject.Foo();
// subject.Responses now has a count if 1, when there might actually be more responses.
}
Я не хочу использовать отложенную загрузку из-за влияния на производительность (и потому что отложенная загрузка не загружает связанные объекты asyn c). Активная и явная загрузка - это нормально.
Изменить: в основном я ищу способ проверить, полностью ли загружено свойство навигации, чтобы я мог загрузить его, которого не было.