【问题标题】:Can I use dapper-dot-net with Entity Framework?我可以在实体框架中使用 dapper-dot-net 吗?
【发布时间】:2013-07-29 19:06:24
【问题描述】:

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

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

DbContext.Database.Connection 

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

【问题讨论】:

    标签: performance entity-framework dapper


    【解决方案1】:

    我认为你必须重新考虑这个问题。通过更改 ORM 来提高性能并不是一个好的技术。 dapper 比 EF 更快更轻是正确的,但这并不意味着要提高应用程序的速度,最好使用 dapper。 EF 足够强大,可以处理整个数据层,如果您遇到性能问题,您必须引入新功能,如缓存或没有 sql db。

    您必须看到从 EF 更改为 dapper 将为您节省多少时间?以及缓存可以为您的应用程序带来多少速度。

    添加 dapper 还有其他开销:当您必须保存点和更新您将如何解决回滚情况时,您将如何管理事务,工作单元和存储库模式呢。

    这些是您在决定选择 Dapper 之前必须检查的因素。

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

      • 虽然 true,但在大多数情况下这不太可能成为问题 - 线程当然 不太可能是一个因素,因此主要留下存在开放数据阅读器的风险 - 很容易发现(错误不是很微妙)
      • @MarcGravell 我相信你的话 :) 但是总是给 Dapper 它自己的连接(而不是使用 EF 连接)不是更安全吗?或者这样做有什么坏处?
      【解决方案3】:

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

      【讨论】:

      • 根据实际经验,“更快”是指“快两三个数量级”。我在 Entity Framework 中有一个高度优化的查询,需要 10 分钟,在转换为 Dapper 后,只需几分之一秒即可完成 20 倍大小和复杂度的查询:stackoverflow.com/questions/9350467/…。
      • @Contango 是 EF 的 AsNoTracking 吗?
      • @Ian Warburton 不确定 - 但无论如何,Dapper 的性能让 Entity Framework 黯然失色。话虽如此,Dapper 主要面向读取数据,所以如果你想写入数据库,那么我想 Entity Framework 会工作,如果一个人对低效、平庸的性能感到满意,可能同时支持 10 个用户。
      • @Contango 为什么只有十个?
      • @Ian 我还没有看到任何实体框架的例子比设计为快速和高效的数据访问层慢不到 10 倍(即在 50% 的理论最大速度之内)使用您选择的语言在某些给定硬件上进行合理的 SQL 查询)。它可以处理 10 或 50 个用户 - 但它会与 100 个用户斗争,当然不能处理 1000 或 10000 个用户。当我谈论“用户”时,我更多地暗示同时用户会给数据库带来一些负载。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-29
      • 1970-01-01
      相关资源
      最近更新 更多