gpt4 book ai didi

orm - Dapper.Rainbow VS Dapper.Contrib

转载 作者:行者123 更新时间:2023-12-02 01:39:24 25 4
gpt4 key购买 nike

有人可以解释一下 Dapper.RainbowDapper.Contrib 之间的区别吗?

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

最佳答案

我已经使用 Dapper 一段时间了,想知道 Contrib 是什么?和 Rainbow项目都是关于我自己的。经过一些代码审查后,以下是我对它们的使用的想法:

Dapper.Contrib

Contrib 在 IDbConnection 接口(interface)上提供了一组扩展方法,用于基本的 CRUD 操作:

  • 获取
  • 插入
  • 更新
  • 删除

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

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

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

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

Dapper 彩虹

Rainbow 是一个抽象类,您可以将其用作 Dapper 类的基类来提供基本的 CRUD 操作:

  • 获取
  • 插入
  • 更新
  • 删除

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

出于所有意图和目的,Rainbow 基本上是您最常用的数据库交互的包装器,并将根据属性名称和类型约束构建无聊的 SQL。

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

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

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

差异?

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

  • 当您希望能够跟踪实体中的更改时,请使用 Contrib。
  • 当您想要使用更多符合标准 ADO.NET 方法的方法时,请使用 Rainbow。

旁注:我希望我早点研究过 Rainbow,因为我已经构建了一个与 Dapper 一起使用的非常相似的基类。

<小时/>

来自文章和引用 @anthonyv 引用:That annoying INSERT problem, getting data into the DB

There are now 2 other APIs you can choose from as well (besides Rainbow) (for CRUD)Dapper.Contrib and Dapper Extensions.I do not think that one-size-fits-all. Depending on your problem andpreferences there may be an API that works best for you. I tried topresent some of the options. There is no blessed “best way” to solveevery problem in the world.

我怀疑 Sam 在上面的引用和相关博客文章中试图传达的内容是:您的场景可能需要大量自定义映射(使用 vanilla Dapper),或者可能需要跟踪实体更改(使用 Contrib),或者您可能有常见的使用场景(使用 Rainbow),或者您可能想要使用它们的组合。或者甚至不使用 Dapper。 YMMV。

关于orm - Dapper.Rainbow VS Dapper.Contrib,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10030285/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com