首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Dapper.Rainbow对Dapper.Contrib

Dapper.Rainbow对Dapper.Contrib
EN

Stack Overflow用户
提问于 2012-04-05 14:12:58
回答 3查看 36.1K关注 0票数 75

有人能解释一下Dapper.RainbowDapper.Contrib的区别吗?

我的意思是什么时候使用SqlMapperExtensions.cs of Dapper.Contrib,什么时候应该使用Dapper.Rainbow?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-10-24 15:14:02

我使用Dapper已经有一段时间了,我想知道折叠式彩虹项目都是关于我自己的。在回顾了一些代码之后,下面是我对它们的使用的一些想法:

Dapper.Contrib

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

  • 到达
  • 插入
  • 更新
  • 删除

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

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

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

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

Dapper.Rainbow

彩虹是一个抽象类,您可以将它用作Dapper类的基类,以提供基本的CRUD操作:

  • 到达
  • 插入
  • 更新
  • 删除

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

出于各种目的和目的,彩虹基本上是最常用的数据库交互的包装器,它将基于属性名称和类型约束构建乏味的SQL。

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

类似地,insert/update方法将根据类型约束的属性名称动态构建insert/update所需的SQL。

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

分歧?

与彩虹之间的主要区别是(IMO),一个跟踪实体的变化,另一个不跟踪:

  • 当您希望能够跟踪实体中的更改时,请使用cont肋骨。
  • 如果您想使用更符合标准ADO.NET方法的内容,请使用彩虹。

顺便提一句:我希望我能更早地了解彩虹,因为我已经建立了一个与Dapper非常相似的基类。

引用@anthonyv引文:这个烦人的插入问题,将数据输入数据库

现在还有另外两个API可以供您选择(除了彩虹Dapper.Contrib以外)(用于CRUD)、和DapperExtension。我不认为一刀切。根据您的问题和首选项,可能有一个最适合您的API。我试着提出一些选择。世上没有解决每一个问题的“最好的方法”。

我怀疑Sam在上述引用和相关博客文章中试图传达的内容是:您的场景可能需要大量自定义映射(使用香草Dapper),或者需要跟踪实体更改(使用cont肋骨),或者您可能有常见的使用场景(使用彩虹),或者您可能希望使用所有这些场景的组合。甚至不用Dapper。YMMV

票数 85
EN

Stack Overflow用户

发布于 2016-10-24 13:27:38

亚当·安德森的这篇文章描述了几个CRUD Dapper扩展库之间的差异:

  • 脱衣舞者肋骨 (自动更改跟踪-仅在脏或不脏的情况下,用于自定义映射的属性,没有组合密钥支持,没有手动密钥支持)
  • 短裙彩虹 (使用Snapshotter进行手动更改跟踪,用于自定义映射的属性,没有组合密钥支持,没有手动密钥支持)
  • Dapper扩展 (无更改跟踪,用于自定义映射的Fluent配置,支持组合键,支持手动密钥规范),还包括用于简单查询的谓词系统(注意:废弃的-不支持最近的Dapper版本,也不支持.NET核心)
  • Dapper SimpleCRUD (无更改跟踪,自定义映射属性,不支持组合密钥支持,支持手动密钥规范),还包括过滤/分页助手、异步支持、自动生成POCO类(通过T4)

票数 35
EN

Stack Overflow用户

发布于 2012-05-10 02:07:42

山姆详细描述了他的后http://samsaffron.com/archive/2012/01/16/that-annoying-insert-problem-getting-data-into-the-db-using-dapper的不同之处。

基本上,这通常不是一个大小适合所有的答案,这取决于我们决定采用哪一种方法,根据您的需要:

现在还有另外两个API可以供您选择(除了彩虹Dapper.Contrib以外)(用于CRUD)、和DapperExtension。我不认为一刀切。根据您的问题和首选项,可能有一个最适合您的API。我试着提出一些选择。世上没有解决每一个问题的“最好的方法”。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10030285

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档