【发布时间】:2011-12-27 13:14:01
【问题描述】:
问题范围:我想使用 EF4.1,而不用牺牲我知道并信任的 Enterprise Library 数据访问块的速度和可靠性。
感谢大量有关 EF 性能调整的 Stackoverflow 链接和博客,我以这种方式发布,其中很多是为了使用与 ADO/Enterprise Lib 数据访问块 (SqlDataReader) 的性能相匹配的 EF4.1。
项目: 1. 没有 linq to Entities/动态 sql。我喜欢 linq,我只是尝试将它主要用于对象。 2. 100% 存储过程,没有跟踪,没有合并,最重要的是,从不调用.SaveChanges()。我只是调用插入/更新/删除过程 DbContext.StoredProcName(params)。在这一点上,我们已经消除了 EF 的几个快速开发元素,但它为您的存储过程自动创建复杂类型的方式对我来说已经足够了。
GetString 和类似的方法是一个 AbstractMapper,它只是通过预期的类型并将数据读取器转换为类型。
所以就我而言,这是要击败的标志。采用我知道速度较慢的东西会很困难。
那就更慢了!!!慢很多!
这更像!! Performance Pie 根据我的结果,性能派应该会增加超过 1% 的跟踪开销 我尝试预编译视图,没有什么比没有跟踪更重要的了!为什么??也许有人可以插话。
因此,与 Enterprise Lib 相比,这并不公平,但我正在对数据库进行一次不定时调用以加载我理解的元数据,每个 IIS 应用程序池加载一次。基本上在您的应用生命周期中一次。
我以这种方式将 EF 用于自动存储过程生成,并使用 Linq to Edmx 自动导入所有这些 edmx 函数节点以映射到实体。然后我为每个实体和一个引擎自动生成一个存储库。
由于我从不调用 SaveChanges,所以我不会花时间映射到设计器中的存储过程。这需要很长时间,而且很容易打破它而不知道它。所以我只是从上下文中调用 procs。
在我在我的新任务关键型医疗设备交付 Web 应用程序中实际实现这一点之前,我希望得到任何意见和批评。
谢谢!
【问题讨论】:
-
我已经使用它几个月了,它工作得很好,但只有一件事。 EF 不是源代码控制或合并友好。如果有人对 EF 持怀疑态度,我确实认为性能不是主要问题。EF 更新整个 .edmx 并将图表 xy 位置存储在 .edmx 中,这使得文件极难合并。我什至有注意到除了两个不同的开发人员之外,相同的未更改的 xml 节点出现了数千行。 Code Smith 用 PlinqO 解决了这个问题,MS 也应该解决这个问题。
标签: entity-framework-4.1 enterprise-library