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

Sco*_*ord 8 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/

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

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

Mit*_*hon 5

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

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

有关详细信息,请参阅Scott Gu的博客.


Sco*_*ord 5

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

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

  • 数据库和模型优先也存在此行为.我的预生成视图是使用同一程序集中的上下文编译的.它们在控制台或Windows服务应用程序中获取,但不在IIS下.我能够看到它,因为我正在使用T4生成它们,并添加了日志. (2认同)