C# 延迟加载示例?

C# 延迟加载示例?,c#,entity-framework,C#,Entity Framework,我正在构建一个基本的MVC核心Web API,并试图使用实体框架进行连接,我遇到了一个叫做“延迟加载”的东西,我似乎无法理解什么是延迟加载旋转的EntityFramework 什么时候使用延迟加载?它有什么好处?来自站点: 延迟加载意味着延迟相关数据的加载,直到您明确请求它为止。例如,Student类包含作为复杂属性的StudentAddress。因此,上下文首先从数据库加载所有student,然后在访问StudentAddress属性时加载特定student的地址,如下所示 using (va

我正在构建一个基本的MVC核心Web API,并试图使用实体框架进行连接,我遇到了一个叫做“延迟加载”的东西,我似乎无法理解什么是延迟加载旋转的EntityFramework

什么时候使用延迟加载?它有什么好处?

来自站点:

延迟加载意味着延迟相关数据的加载,直到您明确请求它为止。例如,
Student
类包含作为复杂属性的
StudentAddress
。因此,上下文首先从数据库加载所有
student
,然后在访问
StudentAddress
属性时加载特定
student
的地址,如下所示

using (var ctx = new SchoolDBEntities())
{
    //Loading students only
    IList<Student> studList = ctx.Students.ToList<Student>();

    Student std = studList[0];

    //Loads Student address for particular Student only (seperate SQL query)
    StudentAddress address = std.StudentAddress;
}
然后当控制到达以下行时:

StudentAddress address = std.StudentAddress;
EF将向db发送第二个查询以加载
StudentAddress

exec sp_executesql N'SELECT 
[Extent1].[StudentID] AS [StudentID], 
[Extent1].[Address1] AS [Address1], 
[Extent1].[Address2] AS [Address2], 
[Extent1].[City] AS [City], 
[Extent1].[State] AS [State]
FROM [dbo].[StudentAddress] AS [Extent1]
WHERE [Extent1].[StudentID] = @EntityKeyValue1',N'@EntityKeyValue1 int',@EntityKeyValue1=1
延迟加载规则:

  • context.Configuration.ProxyCreationEnabled
    应为true
  • context.Configuration.LazyLoadingEnabled
    应为true。航行
  • 属性应定义为
    public
    virtual
    。语境不行 如果属性未定义为虚拟,则延迟加载(在这种情况下,
    StudentAddress
    应为
    virtual

在我看来,延迟加载是从数据库自动加载实体或实体集合的过程

实际上,排序和检索算法是在用户端应用的,而query获取所有数据。默认情况下,延迟加载功能处于启用状态,但可以手动关闭,或者您可以构造智能查询,即使用IQueryable,它在服务器端执行筛选,并仅检索所需的记录。在实践中,它将帮助您节省大量的时间和资源,防止通信量过大和服务器过载

更好的答案在这个网站上->

可能重复的谢谢!这就是我一直在寻找的一个简单的分解如何工作,这是我的新领域,所以我只想确保我做的是正确的。
exec sp_executesql N'SELECT 
[Extent1].[StudentID] AS [StudentID], 
[Extent1].[Address1] AS [Address1], 
[Extent1].[Address2] AS [Address2], 
[Extent1].[City] AS [City], 
[Extent1].[State] AS [State]
FROM [dbo].[StudentAddress] AS [Extent1]
WHERE [Extent1].[StudentID] = @EntityKeyValue1',N'@EntityKeyValue1 int',@EntityKeyValue1=1