我可以在实体框架中使用dapper-dot-net吗?

liu*_*gbo 14 performance entity-framework dapper

我正在尝试使用dapper-dot-net来加速我的asp.net mvc应用程序的某些区域.我也首先使用EF5代码.

由于dapper-dot-net只是IDbConnection的一些扩展,我可以使用

DbContext.Database.Connection 
Run Code Online (Sandbox Code Playgroud)

用dapper-dot-net?我测试它是否有效.但是,我不确定这是使用它的正确方法吗?特别是,当我使用这种方式时,Entity Framework是否会产生一些可能会影响性能的影响?

Ere*_*mez 12

在某些情况下,使用Dapper可以显着提高性能.

您可以与Dapper共享EF连接.但是(虽然不太可能是一个问题)您应该注意并发问题(例如,由于尝试将多个数据读取器与同一连接相关联).

如果遇到此类问题,您可以选择使用连接字符串(DbContext.Database.Connection.ConnectionString)为Dapper提供新连接,而不是共享连接.

  • @MarcGravell我会接受你的话:)但是,总是给Dapper自己的连接(而不是使用EF)更安全吗?或者这样做是否有缺点? (5认同)
  • 虽然*true*,但在大多数情况下这不太可能成为问题 - 线程*当然*不太可能成为一个因素,因此主要是存在开放式数据读取器的风险 - 这很容易发现(错误不是很微妙) (2认同)

Ste*_*tti 6

是的,你可以这样使用它.由于Dapper正在处理扩展方法,因此您可以将其用于代码的性能敏感区域.并且您可以继续将EF用于代码的其他区域.您仍在使用EF的查询速度不会那么快 - 但至少使用Dapper的查询会更快.

  • 根据实际经验,“更快”是指“快两个或三个数量级”。我在 Entity Framework 中有一个高度优化的查询需要 10 分钟,在转换为 Dapper 后,只需要几分之一秒就可以完成 20 倍大小和复杂性的查询:http://stackoverflow.com/questions/9350467/how- do-i-write-one-to-many-query-in-dapper-net/30080951#30080951。 (2认同)