您现在的位置是:网站首页> 编程资料编程资料
Entity Framework Core延迟加载(懒加载)用法_实用技巧_
2023-05-24
307人已围观
简介 Entity Framework Core延迟加载(懒加载)用法_实用技巧_
众所周知在EF 6 及以前的版本中,是支持懒加载(Lazy Loading)的,可惜在EF Core 并不支持,必须使用Include方法来支持导航属性的数据加载。不过现在EF Core的开发团队打算恢复对这一功能的支持(目前还未发布,不过可以在Github上面下载进行测试)。
懒加载
懒加载也可以叫做按需加载、延迟加载。可以分两方面来理解,一方面指暂时不需要该数据,不用在当前马上加载,而可以推迟到使用它时再加载;另一方面指不确定是否将会需要该数据,所以暂时请不要加载,待确定需要后再加载它。懒加载是一种很重要的数据访问特性,可以有效地减少与数据源的交互(注意,这里所提的交互不是指交互次数,而是指交互的数据量),从而提升程序性能。
EF 6 懒加载
我们先来看一看在EF 6中的懒加载的使用方式。
实体定义:
public class Order { public int OrderID { get; set; } public string CustomerID { get; set; } public DateTime? OrderDate { get; set; } public virtual ICollection OrderDetails { get; set; } } public class OrderDetail { public int OrderID { get; set; } public int ProductID { get; set; } public decimal UnitPrice { get; set; } public short Quantity { get; set; } public float Discount { get; set; } public virtual Order Order { get; set; } } 我们在这里定义订单、订单明细实体,它们是一对多关系,通过OrderId字段进行关联。
using (NorthwindContext context = new NorthwindContext()) { Order order = await context.Orders.SingleAsync(item => item.OrderID == 10253); Assert.NotNull(order); Assert.NotNull(order.OrderDetails); Assert.Equal(3, order.OrderDetails.Count); } }在查询订单号为 10253 的订单后,如果我们需要访问订单的明细,不需要再编写一次数据查询的代码,直接访问导航属性即可,EF会自动帮我们填充属性的值。
懒加载需要注意以下两点:
- 在配置中启用了懒加载(默认开启);
- 实体类不能是封闭(
sealed)类,导航属性必须是虚(virtual)属性。
在 EF Core 中启用懒加载
目前EF Core发布的最新版本中并不支持懒加载,开发人员必须使用Include方法,才能完成导航属性的加载。
using (NorthwindContext context = new NorthwindContext()) { Order order = await context.Orders.Include(e => e.OrderDetails).SingleAsync(item => item.OrderID == 10253); Assert.NotNull(order); Assert.NotNull(order.OrderDetails); Assert.Equal(3, order.OrderDetails.Count); }大家需要在Github上面下载最新的源代码来测试这一功能 aspnet/EntityFrameworkCore。
启用懒加载:
public class NorthwindContext : DbContext { protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { var sqlConnectionStringBuilder = new SqlConnectionStringBuilder { DataSource = "****", InitialCatalog = "Northwind", UserID = "sa", Password = "sa" }; optionsBuilder.UseSqlServer(sqlConnectionStringBuilder.ConnectionString); optionsBuilder.UseLazyLoadingProxies(); base.OnConfiguring(optionsBuilder); } }要在通常的应用程序中使用,只需在DbContext的OnConfiguring方法中添加对UseLazyLoadingProxies()扩展方法调用即可。
框架目前是通过Castle.Core框架来生成代理类来实现对导航属性的延迟加载,开发团队打算将该功能做为EF Core的可选安装包。
到此这篇关于Entity Framework Core延迟加载(懒加载)用法的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持。
- Entity Framework Core使用控制台程序生成数据库表
- Entity Framework Core实现Like查询详解
- Entity Framework Core中执行SQL语句和存储过程的方法介绍
- Entity Framework Core批处理SQL语句
- Entity Framework Core实现软删除与查询过滤器
- Entity Framework Core生成列并跟踪列记录
- ASP.NET Core在WebApi项目中使用MiniProfiler分析Entity Framework Core
- Entity Framework Core工具使用命令行
- Entity Framework Core关联删除
- 详解如何在ASP.NET Core中应用Entity Framework
- Entity Framework Core对Web项目生成数据库表
相关内容
- EF Core通过显式编译提高查询性能_实用技巧_
- ASP.NET Core MVC中Required与BindRequired用法与区别介绍_基础应用_
- C#元组类型ValueTuple用法详解_实用技巧_
- WPF开发之利用DrawingVisual绘制高性能曲线图_实用技巧_
- 使用源链接对ASP.NET Core源代码进行调试_实用技巧_
- Entity Framework Core实现Like查询详解_实用技巧_
- ASP.NET Core中的Razor页面使用视图组件_基础应用_
- ASP.NET Core中的Razor页面实现路由功能_实用技巧_
- ASP.NET Core中Cookie验证身份用法详解_实用技巧_
- ASP.NET Core中Razor页面与MVC区别介绍_实用技巧_
