第一个问题是通用的,但我没有找到任何帮助的方法。
我首先用EF6代码构建一个新项目。我了解延迟加载,热切加载和显式加载之间的区别。我不确定应该从哪开始。即我正在利用EF&Linq的优势,但是以后要花多少钱。
以前,我会编写一个特定的SQL查询来获取一组特定的数据。借助EF,我具有极大的灵活性,并且担心会冒险尝试“加载”路线,但是当我开始进行性能和优化工作时,我可能会受到限制,并且/或者切换加载方法可能很耗时。
问题是,如果我从延迟加载和虚拟属性开始,那么以后管理性能并切换到更具体的加载有多容易,还是应该在项目开始之前就设计好所有这些?还是从显式加载开始,然后关闭惰性加载?
问候
我的经验:我从初学者开始就进行延迟加载,然后在性能变得不可接受时开始使用Include。现在,我几乎总是手动编写查询,因为我也超过了Include。性能越重要,您获得的便利就越少。代码库越复杂,要求越高,您就越需要控制。
通常,懒惰加载是好的一刻,而下一刻,您需要进行手动查询并删除所有懒惰加载的东西。过渡通常是突然而激进的。示例:您在页面上呈现问题列表。现在,您还想显示每个问题的question.Answers.Count()。延迟加载无法做到这一点。现在,您需要引入一个自定义视图模型和一个自定义查询(questions.Select(q => new { q.ID, q.Title, AnswerCount = q.Answers.Count() })
)。这总是迟早会因不断增长的业务需求而触发。我通常直接进行手动查询。
要澄清的是,除了自定义查询之外,没有一种性能好的方法可以解决我刚才给出的示例。如果在开发项目的第一个版本时没有询问,您可能必须告诉客户这个小的更改(只是增加的答案数)会花费很多钱,因为您现在必须重写页面的某些部分。僵化以后往往会付出高昂的代价。
另外,请参阅问题下的评论以获取进一步的上下文。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句