Entity Framework Core 2.1 ошибочно загружает некоторые свойства навигации, но не другие

Я пытаюсь решить проблему n+1 с моим проектом Entity Framework Core 2.1, обеспечив загрузку только моих моделей.

У меня проблема в том, что некоторые связанные модели загружаются лениво, а другие нет. И чтобы быть ясным, я не хочу загружать что-либо ленивое вообще, и я не включил это явно. Я не верю, что это ожидаемое поведение.

Например, когда я запускаю этот код в следующем коде, он возвращает все включенные данные, как и ожидалось.

List<User> users = _context.Users
    .Include(u => u.Engine)
    .Include(u => u.ClientType)
    .Include(u => u.Organization)
    .Include(u => u.Role)
    .ToList();

Однако, если я удаляю все включения, около 90% пользователей в списке все равно будут иметь связанные данные. Я считаю, что именно поэтому у меня проблема с n+1, несмотря на то, что я загружаюсь.

Почему загружаются только некоторые из связанных моделей? Почему что-то загружается, если я не включил его? Может ли это быть основной причиной моей проблемы n+1, несмотря на мои попытки использовать только энергичную загрузку?

1 ответ

EF Core не поддерживает отложенную загрузку по умолчанию. Вы должны явно включить его, а затем пометить свои свойства навигации как virtual, Если вы не хотите ленивой загрузки, убедитесь, что ваш OnConfiguring метод не вызывает UseLazyLoadingProxies()

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
=> optionsBuilder
    // .UseLazyLoadingProxies() <- Only use this to enable lazy loading.
    .UseSqlServer(myConnectionString);
Другие вопросы по тегам