我尝试做了很多研究,但我更像是一个数据库人 - 所以即使MSDN中的解释对我也没有任何意义.任何人都可以解释一下,并提供一些关于查询Include()术语中的声明的例子SQL吗?
Yuc*_*uck 129
比方说,您想获得所有客户的列表:
var customers = context.Customers.ToList();
Run Code Online (Sandbox Code Playgroud)
让我们假设每个Customer对象都有其一套的参考Orders,并且每个Order参考了LineItems也可以参考Product.
如您所见,选择具有许多相关实体的顶级对象可能会导致需要从许多来源提取数据的查询.作为性能度量,Include()允许您指示应从数据库中读取哪些相关实体作为同一查询的一部分.
使用相同的示例,这可能会带来所有相关的订单标题,但没有其他记录:
var customersWithOrderDetail = context.Customers.Include("Orders").ToList();
Run Code Online (Sandbox Code Playgroud)
作为你要求SQL的最后一点,第一个语句没有Include()生成一个简单的语句:
SELECT * FROM Customers;
Run Code Online (Sandbox Code Playgroud)
调用的最终语句Include("Orders")可能如下所示:
SELECT *
FROM Customers JOIN Orders ON Customers.Id = Orders.CustomerId;
Run Code Online (Sandbox Code Playgroud)
小智 22
我只是想补充说"Include"是渴望加载的一部分.它在Microsoft的Entity Framework 6教程中描述.这是链接:https: //docs.microsoft.com/en-us/aspnet/mvc/overview/getting-started/getting-started-with-ef-using-mvc/reading-related-data-with-the -entity框架式-AN-ASP净MVC应用程序
摘自链接页面:
以下是实体框架可以将相关数据加载到实体的导航属性中的几种方法:
懒加载.首次读取实体时,不会检索相关数据.但是,第一次尝试访问导航属性时,将自动检索该导航属性所需的数据.这导致向数据库发送多个查询 - 一个用于实体本身,一个用于实体的相关数据必须被检索.默认情况下,DbContext类启用延迟加载.
渴望加载.读取实体时,将同时检索相关数据.这通常会导致单个连接查询检索所需的所有数据.您可以使用该
Include方法指定预先加载.明确加载.这类似于延迟加载,除了您在代码中显式检索相关数据; 访问导航属性时不会自动执行此操作.通过获取实体的对象状态管理器条目并为集合调用Collection.Load方法或为包含单个实体的属性调用Reference.Load方法,手动加载相关数据.(在下面的示例中,如果要加载管理员导航属性,则替换
Collection(x => x.Courses)为Reference(x => x.Administrator).)通常,只有在关闭延迟加载时才使用显式加载.因为它们不会立即检索属性值,所以延迟加载和显式加载也称为延迟加载.
| 归档时间: |
|
| 查看次数: |
79899 次 |
| 最近记录: |