有人能解释一下 衣冠楚楚,还有彩虹和 干净利落,有贡献的区别吗?
我的意思是你什么时候使用 sqlmapperextensions.cs ,贡献和什么时候应该使用,彩虹?
山姆详细描述了他的后 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) ,一个跟踪对实体的更改,另一个不跟踪:
顺便说一句: 我希望我早点研究 Rainbow,因为我已经建立了一个非常类似的基类,我使用 Dapper。
摘自文章,引自@anthonyv 引自: 那个恼人的 INSERT 问题,把数据输入数据库
我怀疑 Sam 在上面的引用和相关的博客文章中想要表达的是: 你的场景可能需要大量的自定义映射(使用普通的 Dapper) ,或者它可能需要跟踪实体更改(使用 Contrib) ,或者你可能有常见的使用场景(使用 Rainbow) ,或者你可能想使用它们的组合。或者干脆不用戴普。YMMV.
Adam Anderson 的这篇文章描述了几个 CRUD Dapper 扩展库之间的区别: