Traté de investigar mucho, pero soy más un tipo de base de datos, por lo que incluso la explicación en MSDN no tiene ningún sentido para mí. ¿Alguien puede explicar y proporcionar algunos ejemplos sobre lo Include()
que hace la declaración en el término de SQL
consulta?
93
Respuestas:
Digamos, por ejemplo, que desea obtener una lista de todos sus clientes:
Y supongamos que cada
Customer
objeto tiene una referencia a su conjunto deOrders
, y que cada unoOrder
tiene referencias a lasLineItems
que también pueden hacer referencia aProduct
.Como puede ver, la selección de un objeto de nivel superior con muchas entidades relacionadas podría resultar en una consulta que necesita obtener datos de muchas fuentes. Como medida de rendimiento, le
Include()
permite indicar qué entidades relacionadas deben leerse de la base de datos como parte de la misma consulta.Usando el mismo ejemplo, esto podría traer todos los encabezados de orden relacionados, pero ninguno de los otros registros:
Como punto final, ya que solicitó SQL, la primera declaración sin
Include()
podría generar una declaración simple:La declaración final que llama
Include("Orders")
puede verse así:fuente
LineItems
yProducts
, la consulta LINQ debería verse asívar customersWithOrderDetail = context.Customers.Include("Orders").Include("LineItems").Include("Products").ToList();
:?Include()
para capturar objetos a lo largo de diferentes "rutas". Si desea objetos en la misma ruta, solo tiene que realizar una llamada que especifique la ruta completa. DadoLineItems
yProducts
no comparten ninguna componentes de la ruta que usted necesita llamadas separadas.Solo quería agregar que "Incluir" es parte de una carga ansiosa. Se describe en el tutorial de Entity Framework 6 de Microsoft. Aquí está el enlace: https://docs.microsoft.com/en-us/aspnet/mvc/overview/getting-started/getting-started-with-ef-using-mvc/reading-related-data-with-the -entity-framework-en-una-aplicación-asp-net-mvc
Extracto de la página vinculada:
fuente
Piense en ello como imponer la carga ansiosa en un escenario en el que sus subelementos serían de carga diferida.
La consulta EF que se envía a la base de datos producirá un resultado mayor al principio, pero al acceder no se realizarán consultas de seguimiento al acceder a los elementos incluidos.
Por otro lado, sin él, EF ejecutaría consultas separadas más tarde, cuando acceda por primera vez a los subelementos.
fuente