entity-framework - 为什么 Entity Framework 需要生成本地查询 View ?休眠怎么样?

标签 entity-framework nhibernate


我发现一个非常有趣的页面:http://msdn.microsoft.com/en-us/library/cc853327.aspx

在这里你可以看到在查询阶段,有一个名为“生成 View ”的阶段会花费很多。尽管 EF 提供了一些方法来预编译它,但是如果您有很多查询没有预编译,您仍然可能会遇到问题。

您可以在此处找到如何:预生成 View 以提高查询性能:http://msdn.microsoft.com/en-us/library/bb896240.aspx

在这里,您可以看到没有预生成的查询将花费两倍的时间。所以这意味着它确实要花很多钱。 http://blogs.msdn.com/b/appfabriccat/archive/2010/08/06/isolating-performance-with-precompiled-pre-generated-views-in-the-entity-framework-4.aspx

所以我有一个问题,EF为什么要设计这个阶段?而NHibernate也有这个阶段吗?如果属实,它在 Nhibernate 中的性能如何?

最佳答案

EF View 与 SQL View 无关 - EF View 是编译为可执行代码的映射转换。 EF 使用这些转换将其查询表示形式转换为目标 SQL 表示形式。进行此编译的原因是整个应用程序的性能 - 您需要投入时间进行初始化,但所有后续查询和更新都将使用编译后的代码,而不是 EDM 中的某些查找。如果您不需要在运行时修改映射,您甚至可以在编译应用程序期间预编译这些 View 。

EF View 用于查询准备(将一种表示形式转换为另一种表示形式),但必须为每个唯一查询完成查询准备。在 EF 4 中,除非您手动使用 Compiled query,否则不会缓存此准备工作。 。在 EF 4.5 和 5.0 (.NET 4.5) 中,所有查询都会自动“编译”= 有缓存,每个唯一查询实际上只准备一次。同一查询的后续执行使用缓存中的编译版本。

您可以在 this beginner guide 中阅读有关性能和 EF 5.0 的更多信息。 .

关于entity-framework - 为什么 Entity Framework 需要生成本地查询 View ?休眠怎么样?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11769588/

相关文章:

c# - 如何在 ASP.NET Core 中设置正确的 AttachDbFilename 相对路径?

c# - 避免使用 NHibernate 实体列表进行 N+1 选择

c# - LINQ和nHibernate教程视频

c# - Entity Framework 属性隐藏

c# - Entity Framework 中的 DbSet

linq - NHIbernate (3.1) - Linq group by then order by count issue

c# - 如何编写 Nhibernate 查询

c# - 从 NHibernate session 断开对象

c# - EF6 多对多更改保存但不创建 ChangeTracker 条目

asp.net-mvc - MVC维护两个不同的模型