Entity Framework Core Tutorial Incluir y ThenInclude
Incluir
El método Include
especifica los objetos relacionados para incluir en los resultados de la consulta. Se puede usar para recuperar algo de información de la base de datos y también para incluir entidades relacionadas. Ahora digamos que tenemos un modelo simple que contiene tres entidades.
public class Customer { public int CustomerId { get; set; } public string FirstName { get; set; } public string LastName { get; set; } public string Address { get; set; } public virtual List<Invoice> Invoices { get; set; } } public class Invoice { public int InvoiceId { get; set; } public DateTime Date { get; set; } public int CustomerId { get; set; } [ForeignKey("CustomerId")] public Customer Customer { get; set; } public List<InvoiceItem> Items { get; set; } } public class InvoiceItem { public int InvoiceItemId { get; set; } public int InvoiceId { get; set; } public string Code { get; set; } [ForeignKey("InvoiceId")] public virtual Invoice Invoice { get; set; } }
Ahora para recuperar todos los clientes y sus facturas relacionadas, tenemos que utilizar el Método de Include
.
using (var context = new MyContext()) { var customers = context.Customers .Include(c => c.Invoices) .ToList(); }
ThenInclude
El método Include
funciona bastante bien para las listas en los objetos, pero ¿qué pasa si hay una necesidad de múltiples niveles de profundidad? Por ejemplo, el Cliente contiene una lista de facturas y cada factura contiene una lista de artículos.
EF Core tiene un nuevo método de extensión ThenInclude (). Puede profundizar a través de las relaciones para incluir múltiples niveles de datos relacionados utilizando el método ThenInclude.
using (var context = new MyContext()) { var customers = context.Customers .Include(i => i.Invoices) .ThenInclude(it => it.Items) .ToList(); }