【问题标题】:Pre-generating Entity Framework Views预生成实体框架视图
【发布时间】:2015-06-23 22:23:55
【问题描述】:

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

我当前的测试运行相同的函数五次,以使用 EF 从我的数据库中提取对象集合。当我在我的 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 => Entity Framework => Generate Views。为我的每个表/视图创建了一个带有字符串的“Model1.View.cs”文件,所以我觉得我走在了正确的道路上。当我再次运行测试时,我得到了相同的结果。在新生成的 'Model1.View.cs' 文件的每个方法中放置一个断点表明它永远不会被命中。

我在这里错过了重要的一步吗?如何告诉 EF 使用由 EF Power Tools 创建的文件,或者如何使复制到输出目录像我在线阅读的那样工作?

【问题讨论】:

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


    【解决方案1】:

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

    但是,EF6 中的视图生成得到了极大改进,并且仅在较大模型或涉及复杂层次结构时才会出现问题。我假设您看到的瓶颈不是由视图生成引起的,而是由模型构建引起的。看看 EF 团队的 this post,其中谈到了通过生成本机图像来提高启动性能。您可能还想看看Performance Consideration

    【讨论】:

    • 我包含交互式预生成视图和生成的原生图像,我的第一次调用减少到 458 毫秒。你真棒。
    • 您好 Matthew,我正在开发一个 ASP.NET MVC 应用程序,我会测试您的解决方案。你在哪里添加 Pawel 的代码?在 Global.asax 文件中?我在外部 dll 中定义了数据库上下文和 edmx。提前致谢。
    • 另外:如果我将代码放在 Global.asax 中,我会收到以下异常消息:上下文正在代码优先模式下使用,代码是从数据库优先的 EDMX 文件生成的或模型优先开发。这将无法正常工作。要解决此问题,请不要删除引发此异常的代码行。如果您希望使用 Database First 或 Model First,请确保 Entity Framework 连接字符串包含在启动项目的 app.config 或 web.config 中。如果您正在创建自己的 DbConnection,请确保它是 E...
    • Pawel,现在在 Visual Studio 2017 上,您的库可以在最新版本的 Entity Framework (6.1.3) 中安全使用吗?
    • @Tony - 我想我可能需要更新 vsix 否则它可能无法安装
    猜你喜欢
    • 1970-01-01
    • 2014-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多