C# 延迟加载示例?
我正在构建一个基本的MVC核心Web API,并试图使用实体框架进行连接,我遇到了一个叫做“延迟加载”的东西,我似乎无法理解什么是延迟加载旋转的EntityFramework 什么时候使用延迟加载?它有什么好处?来自站点: 延迟加载意味着延迟相关数据的加载,直到您明确请求它为止。例如,C# 延迟加载示例?,c#,entity-framework,C#,Entity Framework,我正在构建一个基本的MVC核心Web API,并试图使用实体框架进行连接,我遇到了一个叫做“延迟加载”的东西,我似乎无法理解什么是延迟加载旋转的EntityFramework 什么时候使用延迟加载?它有什么好处?来自站点: 延迟加载意味着延迟相关数据的加载,直到您明确请求它为止。例如,Student类包含作为复杂属性的StudentAddress。因此,上下文首先从数据库加载所有student,然后在访问StudentAddress属性时加载特定student的地址,如下所示 using (va
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
延迟加载规则:
应为truecontext.Configuration.ProxyCreationEnabled
应为true。航行context.Configuration.LazyLoadingEnabled
- 属性应定义为
,public
。语境不行 如果属性未定义为虚拟,则延迟加载(在这种情况下,virtual
应为StudentAddress
)virtual
可能重复的谢谢!这就是我一直在寻找的一个简单的分解如何工作,这是我的新领域,所以我只想确保我做的是正确的。
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