为什么我的EF Code First预生成视图无效?

时间:2012-07-18 14:41:23

标签: c# asp.net entity-framework-4 entity-framework-4.3

我的上下文中有大约300个DbSet,并且app加载后的第一个查询(索引字段中的FirstOrDefault()大约需要40秒。

为了改善这一点,我试图在EF 4.3.1 Code First中使用预生成的视图,使用T4模板:

http://blog.3d-logic.com/2012/06/13/entity-framework-codefirst-view-generation-templates-on-visual-studio-code-gallery/

我编译它,但我发现没有性​​能差异。我希望/假设它会帮助我正在经历的痛苦的缓慢启动,但没有运气。

它应该有帮助吗?如果不是,那么预生成的视图究竟用于什么?而且,我可以做些什么来改善启动时间?至少可以说,分割我的上下文是痛苦的。

2 个答案:

答案 0 :(得分:5)

像NHibernate和EF这样的某些ORM启动起来很慢。而不是试图“修复”这种缓慢,我喜欢通过确保IIS在应用程序池启动时触发此代码来消除此问题。为了解决此问题,您必须将IIS配置为自动启动应用程序池。此解决方案仅适用于.NET 4和IIS7.5及更高版本。

您希望实现一个IProcessHostPreloadClient的类,该类加载ObjectContext并通过向您的web.config添加serviceAutoStartProviders节点并为您的应用程序设置startMode =“AlwaysRunning”来配置您的应用程序以使用它应用程序池。

有关详细信息,请参阅Scott Gu's blog

答案 1 :(得分:5)

事实证明,它实际上似乎在第一个引用的实体的程序集中搜索预生成的视图,而不是在DbContext所在的程序集中。请在此处查看更多讨论:http://blog.3d-logic.com/2012/06/13/entity-framework-codefirst-view-generation-templates-on-visual-studio-code-gallery/#comment-76

为了解决这个问题,我组建了一个新实体并将其放在上下文的程序集中,并将其列为第一个DbSet。现在它捡起来,运作良好(除了这很荒谬)。