广告
返回顶部
首页 > 资讯 > 后端开发 > ASP.NET >EntityFrameworkCore延迟加载(懒加载)用法
  • 802
分享到

EntityFrameworkCore延迟加载(懒加载)用法

2024-04-02 19:04:59 802人浏览 独家记忆
摘要

众所周知在EF 6 及以前的版本中,是支持懒加载(Lazy Loading)的,可惜在EF Core 并不支持,必须使用Include方法来支持导航属性的数据加载。不过现在EF Co

众所周知在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<OrderDetail> 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);
        }

    }

要在通常的应用程序中使用,只需在DbContextOnConfiguring方法中添加对UseLazyLoadingProxies()扩展方法调用即可。

框架目前是通过Castle.Core框架来生成代理类来实现对导航属性的延迟加载,开发团队打算将该功能做为EF Core的可选安装包。

到此这篇关于Entity Framework Core延迟加载(懒加载)用法的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持编程网。

--结束END--

本文标题: EntityFrameworkCore延迟加载(懒加载)用法

本文链接: https://www.lsjlt.com/news/140099.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • EntityFrameworkCore延迟加载(懒加载)用法
    众所周知在EF 6 及以前的版本中,是支持懒加载(Lazy Loading)的,可惜在EF Core 并不支持,必须使用Include方法来支持导航属性的数据加载。不过现在EF Co...
    99+
    2022-11-13
  • MyBatis延迟加载与立即加载案例教程
    MyBatis入门-延迟加载与立即加载 加载策略 延迟加载 延迟加载(lazy load)是(也称为懒加载)Hibernate3关联关系对象默认的加载方式,延迟加载机制是为了避免一些...
    99+
    2022-11-12
  • 详解C# Lazy Loading(延迟加载)
    目录前言示例参考:前言 按需加载对象延迟加载实际是推迟进行创建对象,直到对其调用后才进行创建初始化,延迟(懒加载)的好处是提高系统性能,避免不必要的计算以及不必要的资源浪费。 常规...
    99+
    2022-11-12
  • Linq如何实现延迟加载
    小编给大家分享一下Linq如何实现延迟加载,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Linq延迟加载在查询某对象时,实际上你只查询该对象。不会同时自动获取这个...
    99+
    2023-06-17
  • 解析Mybatis延迟加载问题
    延迟加载问题 MyBatis针对关联表中的数据支持延迟加载。延迟加载其实就是将数据加载时机推迟,比如推迟嵌套查询的执行时机。 延迟加载可以实现先查询主表,按需实时做关联查询,返回关联...
    99+
    2022-11-12
  • mybatis延迟加载的作用是什么
    MyBatis的延迟加载(Lazy Loading)是指在查询数据时,只加载需要使用的数据,而不是一次性加载所有相关数据。延迟加载的...
    99+
    2023-08-24
    mybatis
  • mybatis教程之延迟加载详解
    延迟加载1 使用延迟加载意义在进行数据查询时,为了提高数据库查询性能,尽量使用单表查询,因为单表查询比多表关联查询速度要快。如果查询单表就可以满足需求,一开始先查询单表,当需要关联信息时,再关联查询,当需要关联信息再查询这个叫延迟加载。&n...
    99+
    2023-05-31
    mybatis 延迟加载 batis
  • Hibernae的延迟加载如何理解
    今天给大家介绍一下Hibernae的延迟加载如何理解。文章的内容小编觉得不错,现在给大家分享一下,觉得有需要的朋友可以了解一下,希望对大家有所帮助,下面跟着小编的思路一起来阅读吧。Hibernae 的延迟加载是一个非常常用的技术,实体的集合...
    99+
    2023-06-17
  • 一文了解mybatis的延迟加载
    目录1. 什么时候会创建代理对象2. 如何使用3.延迟加载的好处本文主要介绍下mybatis的延迟加载,从原理上介绍下怎么使用、有什么好处能规避什么问题。延迟加载一般用于级联查询(级...
    99+
    2022-11-13
  • Hibernate延迟加载机制是什么
    本篇内容主要讲解“Hibernate延迟加载机制是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Hibernate延迟加载机制是什么”吧!延迟加载机制是为了避免一些无谓的性能开销而提出来的,...
    99+
    2023-06-17
  • Hibernate延迟加载技术是什么
    这篇文章主要讲解了“Hibernate延迟加载技术是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Hibernate延迟加载技术是什么”吧!Hibernate延迟加载的对象:◆hiber...
    99+
    2023-06-17
  • JavaScript中延迟加载属性的原理和用法
    本篇内容介绍了“JavaScript中延迟加载属性的原理和用法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成...
    99+
    2022-10-19
  • Entity Framework Core延迟加载的方法怎么使用
    本文小编为大家详细介绍“Entity Framework Core延迟加载的方法怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“Entity Framework Core延迟加载的方法怎么使用...
    99+
    2023-06-29
  • Angular实现预加载延迟模块的方法
    Angular实现预加载延迟模块的方法?这个问题可能是我们日常学习或工作经常见到的。希望通过这个问题能让你收获颇深。下面是小编给大家带来的参考内容,让我们一起来看看吧!在使用路由延迟加载中,我们介绍了如何使...
    99+
    2022-10-18
  • JavaScript延迟加载之async与defer的应用
    async 跟 defer的应用场景: 一些特殊的场景, 比如说你的dom要更新完 才能去执行js里面的东西, 但是js是单线程了的,读取js是需要时间的, 但是你又想js文件中获取...
    99+
    2022-11-13
  • MyBatis延迟加载策略深入探究
    目录分步查询的优点在主配置文件当中设置延迟加载在studentDao.xml当中设置分步查询测试结果如何使用延迟加载的好处有两种写法来表示查询信息,分别是链表查询和分步查询的方法。那...
    99+
    2022-11-13
  • Thymeleaf数据延迟加载怎么实现
    这篇文章主要介绍“Thymeleaf数据延迟加载怎么实现”,在日常操作中,相信很多人在Thymeleaf数据延迟加载怎么实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Th...
    99+
    2022-10-19
  • js延迟加载的方式有哪些
    这篇文章主要介绍“js延迟加载的方式有哪些”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“js延迟加载的方式有哪些”文章能帮助大家解决问题。1. defer 属性HTML 4.01 为<scri...
    99+
    2023-07-05
  • Angular中NgModule模块和延迟加载模块的用法
    这篇文章主要介绍“Angular中NgModule模块和延迟加载模块的用法”,在日常操作中,相信很多人在Angular中NgModule模块和延迟加载模块的用法问题上存在疑惑,小编查阅了各式资料,整理出简单...
    99+
    2022-10-19
  • AngularJS如何使用ocLazyLoad实现js延迟加载
    这篇文章主要介绍AngularJS如何使用ocLazyLoad实现js延迟加载,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!开发一个系统遇到了一个问题,用angular路由一个htm...
    99+
    2022-10-19
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作