Orm 简洁的彩虹VS简洁的设计

Orm 简洁的彩虹VS简洁的设计,orm,dapper,dapper-rainbow,Orm,Dapper,Dapper Rainbow,有人能解释一下整洁的彩虹与整洁的设计之间的区别吗 我的意思是什么时候使用Dapper.Contrib的SqlMapperExtensions.cs,什么时候应该使用Dapper.Rainbow?山姆在他的帖子中详细描述了两者的区别 基本上,这是通常的非一刀切的答案,由我们根据您的需要决定采用哪种方法: 除了Rainbow(用于CRUD)之外,您还可以选择另外两种API(用于CRUD) Dapper.Contrib和Dapper Extensions。 我不认为“一刀切”是万能的。取决于你的问题和

有人能解释一下整洁的彩虹与整洁的设计之间的区别吗


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

山姆在他的帖子中详细描述了两者的区别

基本上,这是通常的非一刀切的答案,由我们根据您的需要决定采用哪种方法:

除了Rainbow(用于CRUD)之外,您还可以选择另外两种API(用于CRUD) Dapper.ContribDapper Extensions。 我不认为“一刀切”是万能的。取决于你的问题和 首选项可能有一个最适合您的API。我试着 介绍一些选项。解决这个问题没有什么好办法 世界上的每一个问题


我使用Dapper已经有一段时间了,我一直想知道这些和项目都是关于我自己的。经过一点代码审查,以下是我对其用法的看法:

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

  • 得到
  • 插入
  • 更新
  • 删除
Contrib的关键组成部分是,它为您的实体提供跟踪,以确定是否进行了更改

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

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

主要注意事项:要获得Contrib的跟踪优势,必须使用接口作为类型约束,以允许生成代理类

整洁,彩虹 Rainbow是一个抽象类,可以用作Dapper类的基类,以提供基本的CRUD操作:

  • 得到
  • 插入
  • 更新
  • 删除
以及一些常用的方法,如First(获取表中的第一条记录)和All(获取表中的所有结果记录)

出于所有目的,Rainbow基本上是最常用的数据库交互的包装器,它将基于属性名和类型约束构建乏味的SQL

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

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

主要注意事项:Rainbow希望您的所有表都有一个名为“Id”的标识列

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

  • 如果希望能够跟踪实体中的更改,请使用Contrib
  • 当您想使用标准ADO.NET方法时,请使用Rainbow
另一方面:我希望我能早点看到彩虹,因为我已经建立了一个与Dapper非常相似的基类


从文中引用@anthonyv:

除了Rainbow(用于CRUD)之外,您还可以选择另外两种API(用于CRUD) Dapper.ContribDapper Extensions。 我不认为“一刀切”是万能的。取决于你的问题和 首选项可能有一个最适合您的API。我试着 介绍一些选项。解决这个问题没有什么好办法 世界上的每一个问题

我怀疑Sam在上面的引用和相关博客文章中试图传达的是:您的场景可能需要大量定制映射(使用vanilla-Dapper),或者可能需要跟踪实体更改(使用Contrib),或者您可能有常见的使用场景(使用Rainbow),或者您可能希望使用所有这些场景的组合。甚至不用整洁的衣服。YMMV.

描述了几种CRUD-Dapper扩展库之间的差异:

  • (自动更改跟踪-仅当脏或不脏时,自定义映射的属性,无复合键支持,无手动键支持)
  • (使用Snapshotter进行手动更改跟踪,自定义映射的属性,无复合键支持,无手动键支持)
  • (无更改跟踪,用于自定义映射的流畅配置,支持复合键,支持手动键规范),还包括用于简单查询的谓词系统(注意:已弃用-不支持最新的Dapper版本或.NET core)
  • (无更改跟踪、自定义映射属性、无复合密钥支持、支持手动密钥规范),还包括筛选/分页帮助程序、异步支持、自动POCO类生成(通过T4)

我看不出萨姆在他的帖子中描述了这种差异。他描述了Dapper.Rainbow,然后提到还有Dapper.Contrib。但是这两种实现之间的实际区别是什么呢?嗨!有没有办法使用Dapper.Contrib获取跟踪数据?例如,我希望在对数据库执行更新之前,检查已更改字段中的“旧”和“新”值。谢谢从我在截至2017年11月的报告中看到的情况来看,Dapper Contrib只有一个
IProxy.IsDirty
标志,如果修改了“跟踪”对象的任何属性,就会设置该标志。因此,
Update
所做的唯一事情就是检查
IsDirty
是否为
true
,然后更新所有列。Dapper。彩虹“Snapshotter”可能是您正在寻找的工具。我已经尝试过Snapshotter,但我想用Dapper做一些事情。使用Snapshotter,我必须创建逻辑来比较更改的字段等。谢谢。恳求