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);