【发布时间】:2016-09-21 12:21:25
【问题描述】:
我在 SQL Server 数据库上使用 Entity Framework 6 来查询现有数据库(首先是数据库,所以我的项目中有一个 EDMX)。
我注意到,第一次请求实体时,执行查询可能需要 30 秒。随后对同一对象的查询将在几毫秒内完成。实际执行的 SQL 非常快,所以查询并不慢。
我发现 Entity Framework 在背景上生成视图,这很可能是罪魁祸首。然而,我还没有找到一个很好的解决方案。有一个可以处理视图生成 (EFInteractiveViews) 的 NuGet 包,但它自 2014 年以来一直没有更新,我似乎几乎找不到任何有关如何使用它的信息。
我现在有什么选择?我已经尝试通过执行一些查询来在 Application_Start 上初始化实体框架,但这似乎并没有太大帮助,而且在 Application_Start 上执行真正的查询也非常困难,因为大多数查询使用来自当前的数据用户(尚未登录Application_Start),因此很难提前运行这些。
我考虑过创建一个 ashx 文件,该文件通过调用 API 不断轮询应用程序并使其保持活动状态。我还将应用程序池设置为“AlwaysRunning”,以便在回收应用程序池时 EF 不会重新启动。
有人对我如何解决这个问题或我可以尝试的事情有任何提示或想法吗?
提前非常感谢。我已经花了两天时间寻找可行的解决方案。
【问题讨论】:
-
你使用什么数据库?
-
抱歉,SQL Server。我会更新我的问题
-
您可以尝试使用
myContext.Configuration.ProxyCreationEnabled = false;禁用代理创建。我个人禁用延迟加载,以便明确代码,所以我也myContext.Configuration.LazyLoading = false; -
@Darren:感谢您的建议。这对延迟加载有什么影响?我刚才一直在阅读代理创建,看来这将不再(最佳)工作。有什么想法吗?
-
延迟加载允许延迟加载相关实体。因此,您可以执行 MyUser.Account (其中 account 是另一个实体)而无需专门加载 Account (一旦您执行 .Account 数据库将再次被击中)。似乎是一个很棒的想法,但对我来说,没有什么可以替代在一次调用中准确地请求你想要的东西,而不是对数据库的一系列延迟命中。
标签: c# asp.net .net sql-server entity-framework