从SQL到EF6,我应该从哪种加载方法开始?延迟加载,显式加载,急切加载

模糊逻辑

第一个问题是通用的,但我没有找到任何帮助的方法。

我首先用EF6代码构建一个新项目。我了解延迟加载,热切加载和显式加载之间的区别。我不确定应该从哪开始。即我正在利用EF&Linq的优势,但是以后要花多少钱。

以前,我会编写一个特定的SQL查询来获取一组特定的数据。借助EF,我具有极大的灵活性,并且担心会冒险尝试“加载”路线,但是当我开始进行性能和优化工作时,我可能会受到限制,并且/或者切换加载方法可能很耗时。

问题是,如果我从延迟加载和虚拟属性开始,那么以后管理性能并切换到更具体的加载有多容易,还是应该在项目开始之前就设计好所有这些?还是从显式加载开始,然后关闭惰性加载?

问候

usr

我的经验:我从初学者开始就进行延迟加载,然后在性能变得不可接受时开始使用Include。现在,我几乎总是手动编写查询,因为我也超过了Include。性能越重要,您获得的便利就越少。代码库越复杂,要求越高,您就越需要控制。

通常,懒惰加载是好的一刻,而下一刻,您需要进行手动查询并删除所有懒惰加载的东西。过渡通常是突然而激进的。示例:您在页面上呈现问题列表。现在,您还想显示每个问题的question.Answers.Count()。延迟加载无法做到这一点。现在,您需要引入一个自定义视图模型和一个自定义查询(questions.Select(q => new { q.ID, q.Title, AnswerCount = q.Answers.Count() }))。这总是迟早会因不断增长的业务需求而触发。我通常直接进行手动查询。

要澄清的是,除了自定义查询之外,没有一种性能好的方法可以解决我刚才给出的示例。如果在开发项目的第一个版本时没有询问,您可能必须告诉客户这个小的更改(只是增加的答案数)会花费很多钱,因为您现在必须重写页面的某些部分。僵化以后往往会付出高昂的代价。

另外,请参阅问题下的评论以获取进一步的上下文。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

从SQL到EF6,我应该从哪种加载方法开始?延迟加载,显式加载,急切加载

来自分类Dev

EF6 延迟加载:添加时加载整个集合?

来自分类Dev

实体框架急切和延迟加载

来自分类Dev

实体框架急切和延迟加载

来自分类Dev

EF忽略急切加载的“包含”语句

来自分类Dev

EF6不会延迟加载导航属性

来自分类Dev

EF6不会延迟加载导航属性

来自分类Dev

检查“延迟加载”属性是否已在EF6中加载

来自分类Dev

实体框架 - 导航属性未急切/延迟加载?

来自分类Dev

EFCore急切加载问题

来自分类Dev

laravel 急切加载模型

来自分类Dev

Laravel 急切加载 withTrashed

来自分类Dev

EF6渴望在POCO内加载

来自分类Dev

在 EF6 中加载相关实体

来自分类Dev

EF延迟加载

来自分类Dev

EF 6延迟加载已禁用,但子记录仍然加载

来自分类Dev

如何结合使用“ AsNoTracking”方法在EF Core中加载实体和显式加载相关实体

来自分类Dev

EF6代码首次延迟加载导致空集合

来自分类Dev

EF6代码首次延迟加载导致空集合

来自分类Dev

加入条件以急切加载sqlalchemy orm

来自分类Dev

自动/急切加载/ app以外的目录

来自分类Dev

在Laravel急切的加载中搜索

来自分类Dev

急切地加载循环关联

来自分类Dev

在急切加载时别名 Eloquent 关系

来自分类Dev

急切加载不会返回任何内容

来自分类Dev

急切地在 Angular 中加载图像

来自分类Dev

EF不延迟加载ApplicationUser

来自分类Dev

显式加载计算属性

来自分类Dev

如何为EF中的多个条目进行显式加载?