预生成实体框架视图

本文关键字:框架 视图 实体 | 更新日期: 2023-09-27 17:59:22

我正在开发一个使用实体框架6.1.3的MVC 5应用程序。我试图通过预生成视图来优化第一次调用,这通常需要1-4秒。我理解为什么会发生这种情况,但我觉得我在某个地方错过了重要的一步。

我当前的测试运行了五次相同的函数,使用EF从我的DB中提取一个对象集合。当我在edmx中设置"嵌入输出目录"时运行此程序时,我会得到以下结果:

**

  • 首次EF调用:2617毫秒
  • 第二次EF调用:19毫秒
  • 第三次EF调用:19毫秒
  • 第四次EF调用:17毫秒
  • 第五次EF调用:20毫秒

**

我预计这是因为EF正在生成本地视图以访问数据库。。。

当我切换到"复制到输出目录"时,仔细检查我的文件是否被复制到bin文件夹,以及我的连接字符串是否已更新,然后运行相同的测试,我会得到类似的结果:

**

  • 第一次EF调用:2546毫秒
  • 第二次EF调用:19毫秒
  • 第三次EF调用:18毫秒
  • 第四次EF调用:18毫秒
  • 第五次EF调用:21毫秒

**

第一次通话没有变化,这很奇怪。我添加了EF Power Tools,右键单击我的edmx=>实体框架=>生成视图。为我的每个表/视图创建了一个带有字符串的"Model1.View.cs"文件,所以我觉得自己走在了正确的道路上。当我再次进行测试时,我得到了同样的结果。在新生成的"Model1.View.cs"文件的每个方法中放置一个断点表明它从未被命中。

我是不是错过了重要的一步?我如何告诉EF使用EF Power Tools创建的文件,或者我如何使"复制到输出目录"在联机阅读时正常工作?

预生成实体框架视图

在我记忆中,EF Power Tools并没有更新为支持EF6。如果您确定是视图生成导致了问题,您可以使用视图生成T4模板或交互式预生成视图(是的,我是两者的创建者)。你可以在这篇文章中找到更多关于如何使用T4模板的详细信息。此处介绍交互式预生成视图。

然而,EF6中的视图生成得到了极大的改进,这只是大型模型或涉及复杂层次结构时的问题。我认为您看到的瓶颈不是由视图生成引起的,而是由模型构建引起的。看看EF团队的这篇文章,它谈到了通过生成原生图像来提高启动性能。您可能还想了解性能考虑因素。