衣冠楚楚,彩虹 VS 衣冠楚楚,贡献者

有人能解释一下 衣冠楚楚,还有彩虹干净利落,有贡献的区别吗?

我的意思是你什么时候使用 sqlmapperextensions.cs ,贡献和什么时候应该使用,彩虹?

36078 次浏览

山姆详细描述了他的后 http://samsaffron.com/archive/2012/01/16/that-annoying-insert-problem-getting-data-into-the-db-using-dapper的区别是什么。

基本上,它通常不是一个大小适合所有的答案,它由我们来决定哪种方法去根据你的需要:

现在还有2个其他 API 可供选择(除了彩虹)(用于 CRUD) Dapper。贡献 衣冠整齐的扩展。 我不认为一刀切。取决于你的问题和 可能有一个 API 最适合你。我试着 提出一些选择。没有神圣的“最佳方法”来解决 世界上所有的问题。

我使用 Dapper 已经有一段时间了,我想知道 贡献彩虹项目都是关于我自己的。经过一些代码检查,下面是我对它们用途的看法:

干净利落,有贡献

Contrib 在 IDbConnection 接口上为基本 CRUD 操作提供了一组扩展方法:

  • 走开
  • 插入
  • 更新
  • 删除

Contrib 的关键组件是它为您的实体提供跟踪,以确定是否已经进行了更改。

例如,使用具有接口的 Get 方法作为类型约束将返回一个具有内部字典的动态生成的代理类,以跟踪哪些属性发生了更改。

然后,您可以使用 Update 方法,该方法将生成只更新那些已更改的属性所需的 SQL。

主要警告 : 要获得 Contrib 的跟踪优点,必须使用 Interface 作为类型约束,以允许生成代理类。

衣冠楚楚,还有彩虹

Rainbow 是一个抽象类,你可以用它作为 Dapper 类的基类来提供基本的 CRUD 操作:

  • 走开
  • 插入
  • 更新
  • 删除

以及一些常用的方法,如 First (获取表中的第一条记录)和 All (获取表中的所有结果记录)。

实际上,Rainbow 基本上是您最常用的数据库交互的包装器,它将基于属性名和类型约束构建无聊的 SQL。

例如,使用 Get 操作,Rainbow 将构建一个普通的 SQL 查询并返回所有列,然后将这些值映射回用作约束的类型。

类似地,插入/更新方法将根据类型约束的属性名动态构建插入/更新所需的 SQL。

主要警告 : Rainbow 希望您的所有表都有一个名为“ Id”的标识列。

分歧?

Contrib 和 Rainbow 之间的主要区别在于(IMO) ,一个跟踪对实体的更改,另一个不跟踪:

  • 当您希望能够跟踪实体中的更改时,请使用 Contrib。
  • 如果您想使用更多类似于标准 ADO.NET 方法的内容,请使用 Rainbow。

顺便说一句: 我希望我早点研究 Rainbow,因为我已经建立了一个非常类似的基类,我使用 Dapper。


摘自文章,引自@anthonyv 引自: 那个恼人的 INSERT 问题,把数据输入数据库

现在还有2个其他 API 可供选择(除了彩虹)(用于 CRUD) Dapper。贡献 衣冠整齐的扩展。 我不认为一刀切。取决于你的问题和 可能有一个 API 最适合你。我试着 提出一些选择。没有神圣的“最佳方法”来解决 世界上所有的问题。

我怀疑 Sam 在上面的引用和相关的博客文章中想要表达的是: 你的场景可能需要大量的自定义映射(使用普通的 Dapper) ,或者它可能需要跟踪实体更改(使用 Contrib) ,或者你可能有常见的使用场景(使用 Rainbow) ,或者你可能想使用它们的组合。或者干脆不用戴普。YMMV.

Adam Anderson 的这篇文章描述了几个 CRUD Dapper 扩展库之间的区别:

  • Dapper Contrib (自动更改跟踪-仅在脏或不脏的情况下,自定义映射的属性,不支持复合键,不支持手动键)
  • Dapper Rainbow (使用快照手动跟踪更改,自定义映射属性,不支持复合键,不支持手动键)
  • Dapper Extended (无更改跟踪,用于自定义映射的 Fluent 配置,支持组合键,支持手动键规范) ,还包括一个用于简单查询的谓词系统(注意: 不赞成-不支持最近的 Dapper 版本,也不支持。NET 核心)
  • Dapper SimpleCRUD (无更改跟踪,自定义映射属性,无复合键支持,支持手动键规范) ,还包括过滤/分页助手,异步支持,自动生成 POCO 类(至 T4)

Dapper extensions differences