预生成实体框架视图

时间:2015-06-23 22:23:55

标签: c# asp.net-mvc entity-framework ef-database-first

我正在研究使用Entity Framework 6.1.3的MVC 5应用程序。我正在尝试通过预生成视图来优化第一次调用,通常需要1-4秒。我理解为什么会这样,但我觉得我在某个地方错过了一个重要的步骤。

我当前的测试运行相同的功能五次,以使用EF从我的数据库中提取一组对象。当我在我的edmx中设置'嵌入输出目录'中运行时,我得到以下结果:

**

  • First EF Call: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创建的文件,或者如何在我在线阅读时使复制到输出目录工作?

1 个答案:

答案 0 :(得分:12)

据我所知,EF Power Tools未更新为支持EF6。如果您确定这是导致问题的视图生成,您可以使用视图生成T4 template或交互式pre-gegnerated views(是的,我是两者的创建者)。您可以在this post中找到有关如何使用T4模板的更多详细信息。交互式预生成视图描述为here

然而,EF6中的视图生成得到了极大的改进,对于更大的模型或涉及复杂的层次结构只是一个问题。我认为你看到的瓶颈不是由视图生成引起的,而是由模型构建引起的。看看EF团队的this post,它通过生成原生图像来提高启动性能。您可能还想查看Performance Consideration