Eu tentei fazer muitas pesquisas, mas sou mais um cara de banco de dados - então mesmo a explicação no MSDN não faz nenhum sentido para mim. Alguém pode explicar e fornecer alguns exemplos sobre o que a Include()
afirmação faz no termo de SQL
consulta?
93
Respostas:
Digamos, por exemplo, que você deseja obter uma lista de todos os seus clientes:
E vamos supor que cada
Customer
objeto tenha uma referência ao seu conjunto deOrders
, e que cada umOrder
tenha referências àsLineItems
quais também podem fazer referência a aProduct
.Como você pode ver, selecionar um objeto de nível superior com muitas entidades relacionadas pode resultar em uma consulta que precisa obter dados de várias fontes. Como medida de desempenho,
Include()
permite que você indique quais entidades relacionadas devem ser lidas do banco de dados como parte da mesma consulta.Usando o mesmo exemplo, isso pode trazer todos os cabeçalhos de pedidos relacionados, mas nenhum dos outros registros:
Como ponto final, já que você solicitou o SQL, a primeira instrução sem
Include()
poderia gerar uma instrução simples:A declaração final que chama
Include("Orders")
pode ser assim:fonte
LineItems
eProducts
, a consulta LINQ deve ser semelhante a estavar customersWithOrderDetail = context.Customers.Include("Orders").Include("LineItems").Include("Products").ToList();
:?Include()
para capturar objetos ao longo de "caminhos" diferentes. Se você deseja objetos no mesmo caminho, você só precisa fazer uma chamada que especifica o caminho inteiro. ComoLineItems
eProducts
não compartilha nenhum componente de caminho, você precisa de chamadas separadas.Só queria acrescentar que "Incluir" faz parte do carregamento antecipado. Ele é descrito no tutorial do Entity Framework 6 da Microsoft. Aqui está o link: https://docs.microsoft.com/en-us/aspnet/mvc/overview/getting-started/getting-started-with-ef-using-mvc/reading-related-data-with-the -entity-framework-in-an-asp-net-mvc-application
Trecho da página vinculada:
fonte
Pense nisso como uma aplicação do Eager-Loading em um cenário em que seus subitens seriam de carregamento lento.
O Query EF está enviando para o banco de dados irá render um resultado maior a princípio, mas no acesso nenhuma consulta de acompanhamento será feita ao acessar os itens incluídos.
Por outro lado, sem ele, o EF executaria consultas separadas mais tarde, quando você acessasse os subitens pela primeira vez.
fonte