延迟加载示例? [关闭]

Posted

技术标签:

【中文标题】延迟加载示例? [关闭]【英文标题】:Lazy Loading Examples? [closed] 【发布时间】:2017-03-22 20:14:03 【问题描述】:

我正在构建一个基本的 MVC Core Web API 并尝试使用 Entity Framework 进行连接,我遇到了一个叫做“延迟加载”的东西,我似乎无法理解延迟加载是什么在旋转 EntityFramework?

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

【问题讨论】:

Lazy Loading vs Eager Loading的可能重复 【参考方案1】:

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

实际上,排序和检索算法正在应用在用户端,而查询获取所有数据。默认情况下,延迟加载功能是开启的,但可以手动关闭,或者您可以构建智能查询,即使用 IQueryable,它在服务器端进行过滤并仅检索那些需要的记录。在实践中,它可以帮助您节省大量时间和资源,防止流量过大和服务器过载

更好的答案在这个网站上-> https://msdn.microsoft.com/en-us/library/jj574232(v=vs.113).aspx

【讨论】:

谢谢!这就是我想要对其工作原理进行简单分解的全部内容,这对我来说是新领域,所以我只想确保我做对了。【参考方案2】:

来自entityframeworktutorial网站:

延迟加载是指延迟加载相关数据,直到您明确要求。例如,Student 类包含 StudentAddress 作为复杂属性。因此,上下文首先从数据库中加载所有students,然后在我们访问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;

上面显示的代码将产生两个 SQL 查询。首先,它将获取所有students

SELECT 
[Extent1].[StudentID] AS [StudentID], 
[Extent1].[StudentName] AS [StudentName], 
[Extent1].[StandardId] AS [StandardId]
FROM [dbo].[Student] AS [Extent1]

然后当控制到达以下行时:

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 应该是真的。 context.Configuration.LazyLoadingEnabled 应该是真的。导航 属性应定义为publicvirtual。上下文不会做 如果属性未定义为虚拟,则延迟加载(在这种情况下,StudentAddress 应为 virtual)。

【讨论】:

以上是关于延迟加载示例? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何使用实体框架将大量数据延迟加载到 GridView [关闭]

ssh延迟加载问题的解决方案

MyBatis应用开发(17)延迟加载之应用

Mybatis-延迟加载

Mybatis查询延迟加载

mybatis 延迟加载