Entity Framework Core Eager Loading Then Include on collection
У меня есть три Модели, которые я хочу включить при выполнении запроса.
Вот сценарий.
public class Sale
{
public int Id { get; set; }
public List<SaleNote> SaleNotes { get; set; }
}
public class SaleNote
{
public int Id { get; set; }
public User User { get; set; }
}
public class User
{
public int Id { get; set; }
}
Я могу с нетерпением загрузить SaleNotes вот так...
_dbContext.Sale.Include(s => s.SaleNotes);
Тем не менее, пытаясь с нетерпением загрузить модель User из SaleNote с помощью функции ThenInclude, это сложно, потому что это коллекция. Я не могу найти примеры того, как можно загружать этот сценарий. Может ли кто-то поставить код, который отправляется в следующем ThenInclude, чтобы загрузить пользователя для каждого элемента в коллекции.
_dbContext.Sale.Include(s => s.SaleNotes).ThenInclude(...);
Ответы
Ответ 1
Не имеет значения, что SaleNotes
- это свойство навигации для коллекции. Он должен работать одинаково для ссылок и коллекций:
_dbContext.Sale.Include(s => s.SaleNotes).ThenInclude(sn=>sn.User);
Но, насколько я знаю, EF7 также поддерживает старый многоуровневый синтаксис Include с использованием метода выбора расширения:
_dbContext.Sale.Include(s => s.SaleNotes.Select(sn=>sn.User));
Ответ 2
Для справки, последняя версия EF Core (1.1.0) также поддерживает явную загрузку для этого сценария. Что-то вроде этого...
using (var _dbContext = new DbContext())
{
var sale = _dbContext.Sale
.Single(s => s.Id == 1);
_dbContext.Entry(sale)
.Collection(n => n.SalesNotes)
.Load();
_dbContext.Entry(sale)
.Reference(u => u.User)
.Load();
}