【发布时间】:2013-03-10 12:17:06
【问题描述】:
我正在使用 EF(dll 版本为 4.4)来查询数据库。该数据库包含几个包含课程信息的表格。当查看实际发送到数据库的内容时,我看到了一个庞大的、几乎 1300 行的 SQL 查询(由于它的大小,我不会在这里粘贴)。我在上下文中运行的查询如下所示:
entities.Plans
.Include("program")
.Include("program.offers")
.Include("program.fees")
.Include("program.intakes")
.Include("program.requirements")
.Include("program.codes")
.Include("focuses")
.Include("codes")
.Include("exceptions")
.Include("requirements")
where plans.Code == planCode
select plans).SingleOrDefault();
我想避免在从每个相关表中收集信息时返回服务器,但是对于如此大的查询,我想知道是否有更好的方法来做到这一点?
谢谢。
【问题讨论】:
-
好吧,你正在做急切加载,你的查询试图一次获取所有数据,因此它很大。你到底认为那里有什么问题?其他选项是使用虚拟属性进行延迟加载,当您尝试访问它们时,EF 会在后台获取这些属性,但您确实指定不希望往返数据库。
-
这里有一种类似的答案stackoverflow.com/questions/5521749/…
-
我想我想知道我是否正确地看待这个问题。一个大查询与几个小查询,或者是否有更好的方法。
-
您真的需要所有这些信息吗?你打算用它做什么?人类可能无法理解/处理它,但它可能对某些自动化处理有意义。我想我会问自己——如果我不使用 EF(创建这种查询很容易)但必须自己编写 SQL——我会创建这样的查询还是会找到我真正需要的东西并获取这些信息从数据库中提取并在需要时发送其他查询? (9 个连接是相当多的,但如果可以证明可能还可以)
-
其他表格中的信息被汇总显示为课程信息的简短摘要,所以是的,我真的需要它。
标签: entity-framework entity-framework-4