EF6 中的急切加载、延迟加载和显式加载

2024-01-03

我读过这个tutorial http://www.entityframeworktutorial.net/EntityFramework5/entity-framework5-introduction.aspx和这个article https://msdn.microsoft.com/en-us/data/jj574232.aspx但我不太明白每种加载类型的用途。

我解释

我有这个 POCO :

public partial class dpc_gestion
{
    public dpc_gestion()
    {
        this.ass_reunion_participant = new HashSet<ass_reunion_participant>();
        this.dpc_participant = new HashSet<dpc_participant>();
        this.dpc_reunion = new HashSet<dpc_reunion>();
    }

    public int dpc_id_pk { get; set; }
    public Nullable<int> dpc_id_gdp_fk { get; set; }
    public Nullable<int> dpc_id_theme { get; set; }
    public int dpc_id_animateur_fk { get; set; }
    public Nullable<System.DateTime> dpc_date_creation { get; set; }
    public Nullable<System.DateTime> dpc_date_fin { get; set; }
    public Nullable<System.DateTime> dpc_date_engag_anim { get; set; }
    public Nullable<bool> dpc_flg_let_engag_anim { get; set; }
    public Nullable<bool> dpc_flg_fsoins_anim { get; set; }
    public virtual ICollection<ass_reunion_participant> ass_reunion_participant { get; set; }
    public virtual theme_dpc theme_dpc { get; set; }
    public virtual gdp_groupe_de_pair gdp_groupe_de_pair { get; set; }
    public virtual ICollection<dpc_participant> dpc_participant { get; set; }
    public virtual ICollection<dpc_reunion> dpc_reunion { get; set; }
}

我明白了这一点:

  1. 对于延迟加载:因为加载是惰性的,如果我调用dbsetdpc_gestion所有导航属性won't被加载。这种类型的加载在性能和响应能力方面是最好的。它默认启用,如果我想重新启用它,我必须设置:

    context.Configuration.ProxyCreationEnabled = true;    
    context.Configuration.LazyLoadingEnabled = true;
    
  2. 对于急切的加载它并不懒惰:它在我加载时加载了所有导航属性dpc_gestion。可以使用以下方式加载导航属性include方法。要启用此加载类型:

    context.Configuration.LazyLoadingEnabled = false;
    
  3. 对于显式加载这就像急切加载,但我们使用Load方法而不是include.

所以我想知道:

  1. 这份小简历是否属实?
  2. 如果这是真的,那么急切加载和显式加载有什么区别?
  3. 如果我使用延迟加载我打电话给例如dpc_gestion.dpc_participant,导航属性是否加载?否则我会得到异常?
  4. 是否存在急切加载或显式加载在性能和响应能力方面优于延迟加载的情况?

Thanks


这份小简历是否属实?

Yes.

如果这是真的,那么急切加载和显式加载有什么区别?

预加载是相反的延迟加载 but 显式加载类似于延迟加载, 除了那个:您在代码中显式检索相关数据;当您访问导航属性时,它不会自动发生。您可以通过获取实体的对象状态管理器条目并调用Collection.Load收集方法或Reference.Load保存单个实体的属性的方法。

From techblog http://techblog.treenodes.com/index.php/2012/06/26/understanding-lazy-loading-eager-loading-and-explicit-loading-with-entity-framework-implementation/:

急切加载:

预加载是的反面延迟加载的过程是: 与对象一起加载一组特定的相关对象 查询中明确要求的。

显式加载:

显式加载定义为:当查询返回对象时, 相关对象不会同时加载。默认情况下,它们是 除非使用 Load 方法明确请求,否则不会加载 导航属性。

And:

例如,如果我使用延迟加载并且我调用dpc_gestion.dpc_participant,导航属性是否加载?否则我会得到异常?

您不会遇到任何异常,并且导航属性应该加载。

是否存在急切加载或显式加载更好的情况 在性能和响应能力方面比延迟加载更好吗?

预加载当您需要主表的所有检索行的相关数据时,通常会更有效。而且当关系不是太多的时候,急切加载将是减少服务器上进一步查询的好习惯。但是当您知道您不会立即需要房产时延迟加载也许是一个不错的选择。在您的数据库上下文将被释放并且延迟加载无法再发生的情况下,急切加载也是一个不错的选择。例如,考虑以下内容:

public List<Auction> GetAuctions()
{
    using (DataContext db = new DataContext())
    {
        return db.Auctions.ToList();
    }
}

调用此方法后,您无法延迟加载相关实体,因为db被处置,所以急切加载这里会是一个更好的选择。

还有一点需要注意的是:延迟加载会产生几个SQL请求预加载通过一个请求加载数据。预加载也是解决问题的一个不错的选择n+1选择问题在 ORM 中。 看看这个帖子:什么是n+1选择问题? https://stackoverflow.com/questions/97197/what-is-the-n1-selects-issue

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

EF6 中的急切加载、延迟加载和显式加载 的相关文章

  • 数据结构的优化存储以实现快速查找和持久化

    Scenario 我有以下方法 public void AddItemSecurity int itemId int userIds public int GetValidItemIds int userId 最初我正在考虑表单上的存储 i
  • 是否可以通过引用以基类作为参数的函数来传递派生类

    假设我们有一个抽象基类IBase使用纯虚方法 接口 然后我们推导出CFoo CFoo2来自基类 我们有一个知道如何使用 IBase 的函数 Foo IBase input 这些情况下通常的场景是这样的 IBase ptr static ca
  • 为什么不能使用initializer_list来初始化unique_ptr的向量? [复制]

    这个问题在这里已经有答案了 我想知道为什么initializer list 不能与unique ptr 一起使用 std vector
  • 无法在表适配器配置属性中找到对象“Web.config”的连接“MyConnName”

    I want to change the query in table adapter but it s not opening throwing an error Configure table Adapter Failed in pro
  • Visual Studio 2015 C# 找不到参考

    我在使用 Visual Studio 2015 和 C 时遇到了问题 在同一解决方案中添加对其他项目的引用时 Visual Studio 找不到所有类 例如 我创建了一个单元测试项目 我添加了对我创建的通信项目的引用 库中有 10 个类 但
  • 使用 Process.Start() 打开文件夹时访问被拒绝异常

    我有一个 C 中的 winforms 应用程序 我必须在其中打开某个文件夹 我用 System Diagnostics Process Start pathToFolder 这会导致以下异常 System ComponentModel Wi
  • 如何使用 EF Code First 解释枚举类型

    这是一个模型 Public class Person Key Public int PersonId get set Public int Age get set Public ColorEnum FavoriteColor get set
  • 本地主机和 request.Url.Authority

    我的应用程序通过 URL 中的公司标识符分隔用户 company1 app com company2 app com 我正在本地 PC 上进行测试 请求如下 company1 localhost com 但是 我的 request Url
  • Docker 不遵循构建目录中的符号链接

    我正在对一个应用程序进行 Docker 化 其中涉及通过 Clang 将二进制文件与其他 C 文件链接 我们维护二进制文件的符号链接版本 因为它们在整个代码库中使用 我的 Docker 构建目录包含整个代码库 包括源文件以及这些源文件的符号
  • C++ 虚拟关键字与重写函数

    我正在学习c 并且正在学习virtual关键字 我在互联网上搜索试图理解它但无济于事 我进入编辑器并做了以下实验 期望它打印两次基本消息 因为我的印象是需要 virtual 关键字来覆盖函数 然而 它打印出了两条不同的消息 有人可以向我解释
  • 为什么 C++20 范围不只提供管道语法?

    我知道这个问题听起来很奇怪 所以这里有一些背景信息 最近 我很失望地了解到 C 20 范围内的映射缩减并不像人们所期望的那样工作 即 const double val data transform accumulate 不起作用 你必须这样
  • 如何从 Function App 设置会话 ID 或创建自定义字段到 Application Insights

    功能应用程序如下 public static async Task
  • C# 或 Windows 相当于 OS X 的 Core Data?

    我迟到了 现在才开始在 OS X Cocoa 中使用 Core Data 它令人难以置信 并且确实改变了我看待事物的方式 C 或现代 Windows 框架中是否有等效的技术 即拥有可免费保存 数据管理 删除 搜索的托管数据类型 还想知道Li
  • 来自资源中 ImageSource 的 System.Drawing.Image

    我的问题与这个非常相似 wpf图像资源以及运行时在wpf控件中更改图像 https stackoverflow com questions 940592 wpf image resources and changing image in w
  • std::iota 的 iota 代表什么?

    我假设 i 是增量 a 是分配 但我无法弄清楚或找到答案 而且 它看起来与非标准非常相似itoa我认为这很令人困惑 C iota is not an acronym or an initialism It is the word iota
  • C 中函数“fgets”的参数太少

    每当我编译这个错误时 我都会收到该错误 但我不知道为什么 我直接从书上抄袭这个 有人可以帮忙吗 include
  • 使texture2D在运行时/脚本Unity3D中可读[重复]

    这个问题在这里已经有答案了 我有一个插件 可以让我访问 Android 手机图库中的图片 这给了我一个Texture2D类型的纹理 然后我想使用 GetPixels 函数对其进行编辑 但默认情况下它未设置为可读 如何使纹理可读 以便我可以在
  • 如何在您的网站中连接两个人

    有一款名为 Verbosity 的游戏 这是一款有目的的游戏 位于此链接上www gwap com 在游戏中 他们随机连接两个玩家互相玩 游戏是玩家1应该向他的搭档 玩家2 描述一个单词 而玩家2应该猜测这个单词 我正在尝试建立一个网站来执
  • 频繁插入已排序的集合

    我已经对集合 列表 进行了排序 并且我需要始终保持其排序 我目前在我的集合上使用 List BinarySearch 然后在正确的位置插入元素 我也尝试过在每次插入后对列表进行排序 但性能不可接受 有没有一种解决方案可以提供更好的性能 也许
  • File.Move 的原子性

    我想将目录中的文件重命名为原子事务 该文件不会更改目录 该路径作为 NTFS 文件系统的 UNC 路径提供 可能位于服务器 03 或 08 上 File Move 对于这些目的来说是原子的吗 例如 它要么成功完成 要么失败 以使原始文件仍然

随机推荐

  • 当矩阵包含许多小条目时,base::chol() 会变慢

    我注意到了base chol 当矩阵包含许多小元素时 速度会严重减慢 这是一个例子 disable openMP library RhpcBLASctl blas set num threads 1 omp set num threads
  • 什么是图像 uri?列表视图中的图像 uri

    有人可以向我解释一下什么是图像 uri 吗 我有一个带有列表视图的 Android 应用程序 可以附加图像 并且该列表视图显示 imag uri 谢谢 URI 是一个地址 例如 http www google com image png它指
  • Jquery“如果这个和如果那个”然后执行此操作

    这应该很简单 但它对我不起作用 我想说 如果它没有类 current 并且主体类不等于 home 则执行此操作 这是我正在尝试的 除其他外 但无济于事 只有第一个条件有效 nav1 gt ul gt li mouseleave functi
  • JCenter 和 Bintray 不同步

    我发布了一个 Scala 库Bintray https bintray com angelcervera maven osm4scala 1 0 对于 Scala 2 11 和 2 10 But in JCenter https jcent
  • 为什么我的 Azure Function App 时间戳少了一个小时

    我有一个每五分钟运行一次的 Azure Function App 该文档有一个时间戳字段 使用 DateTime Now 我住在英国 目前是英国夏令时 26 09 18 比 GMT 早 1 小时 我的 Azure 数据中心位于英国南部 时间
  • 如何在mybatis 3中使用if语句比较字符串-动态sql

    在myBatis 3中使用动态sql时如何比较字符串 以前使用 iBatis 您可以执行以下操作
  • Delphi XE2 RTTI坏了?

    我最近从 D2010 迁移到 DXE2 并在 XE2 和 XE3 在我的朋友 XE3 中测试 中发现了一个与类内 TBytes 字段的 RTTI 生成相关的致命错误 或功能 我发现类内 TBytes 变量的 RTTI 信息永远不会生成 以下
  • Git 克隆错误:“致命:不允许...引用的多次更新”

    我尝试时遇到错误git clone一个存储库 git clone https github com laradock laradock git Cloning into laradock remote Enumerating objects
  • 使用 LINQ 在 OrderBy 中自定义排序逻辑

    对字符串列表进行排序的正确方法是什么 我希望以下划线 开头的项目位于列表的底部 否则一切都是按字母顺序排列的 现在我正在做这样的事情 autoList OrderBy a gt a StartsWith ZZZZZZ a a 如果您想要自定
  • Android 媒体播放器错误 (1,-1010)

    我正在尝试从 URL 流式传输音乐 我正在使用 SeekBar 来更改歌曲的位置 尝试将歌曲的位置更改为尚未下载的位置时出现错误 在其他情况下 如果歌曲已完全下载 则代码可以正常工作 出现以下错误 E MediaPlayerNative 错
  • Spring boot嵌入式tomcat - 413请求实体太大

    我在 IBM 公共云上运行 我有 apu 连接来访问 Cloud Foundry 微服务 我已经浏览了很多帖子并尝试了各种方法 但我似乎无法让它发挥作用 这是我的 Spring Boot 属性文件配置设置 The name of the a
  • MySQL:在结果之间使用日期条件

    我有一个执行此操作的 SQL 语句 group by date having date between 2010 07 01 and 2010 07 10 结果如下 sum test day 20 2010 07 03 120 2010 0
  • 基于条件标准寻找模式

    我希望能够在相邻列中根据特定标准找到最常见的值 例如 gt ROW A ROW B gt Blue Jason gt Blue Jason gt Blue Charles gt Red Alfred gt Red Alfred gt Red
  • 回调函数抛出意外的“不一致的参数”错误

    我正在使用 GNU Octave 版本 4 4 1 我正在尝试通过包含两个滑块来制作简单振荡器的交互式绘图 这两个滑块将允许更改初始速度和振荡器质量 绘图本身以及带有一个滑块 用于速度 的脚本都显示良好 这是带有回调函数的脚本的一部分 fu
  • GCD 和 RunLoop

    在我的应用程序中我添加了一个CFMach端口参考 via CFMachPortCreateRunLoopSource 到线程CF运行循环 现在我问自己 这可以使用 GCD 来完成吗 让我们说 而不是生成我自己的NSThread并添加创建的C
  • git:如何将某个作者的所有提交重新设置为单独的分支?

    I m using some code for which no SCM is used and receive occasional updates in the form of all project files although on
  • 适用于套接字流的 C++/Java 序列化库?

    我需要用 C Obj C 编写一个服务器 它可以从用 Java 和 C 构建的多个客户端接收流数据 挑战 我需要有效地序列化和反序列化数据结构 一个 C 客户端将生成 128x96x2 维浮点数组以及一些元数据 每秒大约 30 次 视频功能
  • 如何在客户端服务中动态加载SPRING_PROFILES_ACTIVE值?

    我是 Spring 新手 正在创建 Spring Cloud 配置服务 我已成功创建配置服务 其中所有配置都在那里 在我的客户端服务中 这将从配置服务中获取所有必要的配置 我需要根据SPRING PROFILES ACTIVE清单文件中定义
  • 使用纹理贴图对球体进行凹凸贴图

    我们想用纹理贴图对球体进行凹凸贴图 然而 表面 球体的面积是纹理贴图面积的 10 倍 两者的面积均以像素为单位 描述纹理贴图用于凹凸贴图的不同方式 通常矩形纹理用于球体 texture u v 坐标用作球坐标的角度 结果是 纹素在赤道附近较
  • EF6 中的急切加载、延迟加载和显式加载

    我读过这个tutorial http www entityframeworktutorial net EntityFramework5 entity framework5 introduction aspx和这个article https