Shu*_*aib 64 orm dapper dapper-rainbow
有人可以解释一下Dapper.Rainbow和Dapper.Contrib之间的区别吗?
我的意思是你什么时候使用Dapper.Contrib的SqlMapperExtensions.cs,你什么时候应该使用Dapper.Rainbow?
Met*_*urf 74
我一直在使用Dapper一段时间,并想知道Contrib和Rainbow项目是关于我自己的.经过一些代码审查,以下是我对其用途的看法:
Contrib在IDbConnection接口上提供了一组扩展方法,用于基本的CRUD操作:
Contrib的关键组成部分是它为您的实体提供跟踪,以确定是否已进行更改.
例如,使用带有接口的Get方法作为类型约束将返回动态生成的代理类,其中包含内部字典以跟踪已更改的属性.
然后,您可以使用Update方法,该方法将生成仅更新已更改的属性所需的SQL.
Major Caveat:要获得Contrib的跟踪优点,必须使用Interface作为类型约束来允许生成代理类.
Rainbow是一个Abstract类,您可以将其用作Dapper类的基类,以提供基本的CRUD操作:
以及一些常用的方法,如First(获取表中的第一条记录)和All(获取表中的所有结果记录).
出于所有意图和目的,Rainbow基本上是最常用的数据库交互的包装器,并将基于属性名称和类型约束构建无聊的SQL.
例如,使用Get操作,Rainbow将构建一个vanilla SQL查询并返回所有列,然后将这些值映射回用作约束的类型.
类似地,插入/更新方法将基于类型约束的属性名称动态地构建插入/更新所需的SQL.
Major Caveat:Rainbow希望你的所有表都有一个名为"Id"的标识列.
Contrib和Rainbow之间的主要区别在于(IMO),一个跟踪您实体的变化,另一个不跟踪:
旁注:我希望我早些时候看过Rainbow,因为我已经建立了一个与Dapper一起使用的非常相似的基类.
从文章和引用@anthonyv引用:那令人讨厌的INSERT问题,将数据导入数据库
现在还有2个其他API可以选择(除了Rainbow)(对于CRUD) Dapper.Contrib和Dapper Extensions.我不认为这是一刀切的.根据您的问题和偏好,可能会有一个最适合您的API.我试着提出一些选择.没有幸福的"最佳方式"来解决世界上的每一个问题.
我怀疑Sam在上面的引文中试图传达的内容和相关的博客帖子是:您的场景可能需要大量自定义映射(使用vanilla Dapper),或者它可能需要跟踪实体更改(使用Contrib),或者您可能有常见的使用场景(使用Rainbow)或者你可能想要使用它们的组合.或者甚至不使用Dapper.因人而异.
Gro*_*roo 22
Adam Anderson的这篇文章描述了几个CRUD Dapper扩展库之间的差异:
| 归档时间: |
|
| 查看次数: |
28666 次 |
| 最近记录: |