【问题标题】:How to pre-compile my EF Views如何预编译我的 EF 视图
【发布时间】:2013-12-19 14:27:15
【问题描述】:

故事如下:我有一个使用 Entity Framework 4.0 的大型 MVC 2 网站,几天前,我决定升级 MVC 2 => MVC 4 和 EF4 => EF6 和 .NET Framework 4.5。

我在一个包含大约 150 个控制器和 300 多个实体的项目中做到了这一点。

现在项目正在运行,但没有我想象的那么快。

我正在使用实体框架 6.0.2 和 EF 5.x DBContext Generator T4。我使用了 DB Context 生成器,因为使用 EF4 我首先使用了数据库。

过去我使用这个命令行来预编译我的视图。

"%windir%\Microsoft.NET\Framework\v4.0.30319\EdmGen.exe" /nologo /语言:CSharp /模式:ViewGeneration “/inssdl:$(TargetDir)Models/DBModel.ssdl” “/incsdl:$(TargetDir)Models/DBModel.csdl” "/inmsl:$(TargetDir)Models/DBModel.msl" "/outviews:$(ProjectDir)Models/DBModel.Views.cs"

XCOPY "$(TargetDir)Models/DBModel.csdl" "$(ProjectDir)" /R /Y XCOPY "$(TargetDir)Models/DBModel.ssdl" "$(ProjectDir)" /R /Y XCOPY "$(TargetDir)Models/DBModel.msl" "$(ProjectDir)" /R /Y XCOPY "$(TargetDir)Models/SiteWeb.csdl" "$(ProjectDir)" /R /Y XCOPY "$(TargetDir)Models/SiteWeb.ssdl" "$(ProjectDir)" /R /Y XCOPY "$(TargetDir)Models/SiteWeb.msl" "$(ProjectDir)" /R /Y

现在,我如何使用 EF6 做同样的事情?

【问题讨论】:

    标签: entity-framework asp.net-mvc-4 entity-framework-6


    【解决方案1】:

    您不能使用 EdmGen 为 EF6 生成视图。一种方法是使用PowerTools。我还创建了一些 T4 templates(在 VS Gallery 上可用)用于生成视图,one of them 用于 EF6。不确定它对您有多大帮助,因为 EF6 是针对 CodeFirst 的。最后,我最近在 NuGet 上发布了一个包,它允许动态生成视图并保存它们以供以后使用 - 请参阅 this 了解更多详细信息。

    顺便说一句。使用 5.x DBContext 生成器感觉不对,EF6 感觉不对。 VS2013 附带的 EF 工具(以及可用于 VS2012 的 standalone version)使用 EF6 模板来生成代码,所以我不确定你为什么使用 EF5 版本(并且有点想知道它是如何编译给定的 this

    【讨论】:

    • 我的基于 EF 6.2 的 Web 应用程序首次使用 InteractiveViews 库在 60 秒内加载,但是当我切换到 EF 6.1X 并通过电动工具生成视图时,我能够将时间缩短 20 到 25 秒秒
    • 要么视图生成没有启动(如果你在 EF 必须生成视图之后注册它,它根本不会被调用)或者它是第一次生成和保存视图以及后续运行应该使用保存的视图。从概念上讲,编译时生成的视图与运行时生成的视图相同,因此启动时间不应该有差异,除非是第一次交互式视图需要生成视图并将其保存以供后续运行(PowerTools/tt 模板执行此步骤在设计时)
    • Here 是解释问题的帖子,是我同事发的,@Pawel 可以请你看一下吗,谢谢
    • 我阅读了相关帖子,但我认为这只是猜测。我建议在本地运行项目,重现问题,测量,找到瓶颈,然后弄清楚发生了什么。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-09
    • 1970-01-01
    • 1970-01-01
    • 2012-06-15
    • 2012-04-10
    • 1970-01-01
    相关资源
    最近更新 更多