Dapper.Rainbow VS Dapper.Contrib

dapper dapper-rainbow orm

質問

誰かがDapper.RainbowDapper.Contribの違いを説明できますか?

私はDapper.ContribのSqlMapperExtensions.csをいつ使用するのですか?Dapper.Rainbowをいつ使うべきですか?

受け入れられた回答

私は今Dapperをしばらく使っていて、 ContribRainbowのプロジェクトが自分自身について何であるか疑問に思っています。少しのコードレビューの後、ここで私の考え方をご紹介します:

Dapper.Contrib

Contribは、基本的なCRUD操作のためのIDbConnectionインタフェースの拡張メソッドのセットを提供します:

  • 取得する
  • インサート
  • 更新
  • 削除

Contribの重要な要素は、エンティティが変更が加えられたかどうかを識別するための追跡を提供することです。

たとえば、型制約としてインターフェイスを持つGetメソッドを使用すると、内部辞書を使用して動的に生成されたプロキシクラスが返され、変更されたプロパティが追跡されます。

その後、変更されたプロパティのみを更新するために必要なSQLを生成するUpdateメソッドを使用できます。

主要な注意:Contribのトラッキングの良さを得るためには、あなたの型制約としてInterfaceを使用して、プロキシクラスを生成できるようにする必要があります。

Dapper.Rainbow

Rainbowは、Dapperクラスの基本クラスとして使用して基本的なCRUD操作を提供できる抽象クラスです。

  • 取得する
  • インサート
  • 更新
  • 削除

First(テーブルの最初のレコードを取得する)やAll(すべての結果レコードをテーブルに取得する)などのよく使用されるメソッドもあります。

すべての目的と目的のために、Rainbowは基本的に最も一般的に使用されるデータベース対話のラッパーで、プロパティ名と型制約に基づいて退屈なSQLを構築します。

たとえば、Getオペレーションでは、RainbowはバニラSQLクエリを構築し、すべての列を返し、それらの値を制約として使用される型に戻します。

同様に、挿入/更新メソッドは、型制約のプロパティ名に基づいて挿入/更新に必要なSQLを動的に構築します。

主な注意点 :Rainbowは、すべてのテーブルに「Id」というID列があることを期待しています。

違いは?

ContribとRainbowの主な違いは(IMO)です。あなたのエンティティの変更を追跡します。もう1つは、

  • エンティティの変更を追跡できるようにするには、Contribを使用します。
  • レインボーは、標準的なADO.NETのアプローチに沿って何かを使いたいときに使用します。

サイドノート:私がDapperで使用するのと非常によく似た基本クラスを構築しているので、私は以前Rainbowを調べておきたいと思います。


記事と引用符@anthonyvから引用: その厄介なINSERTの問題、DBにデータを取得する

現在、Rainbow以外にも(CRUD用) Dapper.ContribDapper Extensionの 2つのAPIが用意されています。私はそれがすべてに合っているとは思わない。あなたの問題や好みに応じて、最適なAPIがあるかもしれません。私はいくつかのオプションを提示しようとしました。世界のあらゆる問題を解決するための恵まれた方法はありません。

私は、サムが上の引用で伝えようとしていることを疑っています。関連するブログ記事は次のとおりです:あなたのシナリオには多くのカスタムマッピングが必要かもしれません(vanilla Dapperを使う)か、 (Rainbowを使用する)一般的な使用シナリオを持っているか、それらをすべて組み合わせて使用​​することができます。 Dapperを使うことさえありません。 YMMV。


人気のある回答

Adam Andersonによるこの記事では、いくつかのCRUD Dapper拡張ライブラリの違いについて説明しています。

  • Dapper Contrib (自動変更追跡 - ダーティかどうか、カスタムマッピングの属性、複合キーのサポートなし、手動キーのサポートなし)
  • Dapper Rainbow (Snapshotterを使用した手動変更追跡、カスタムマッピングの属性、複合キーのサポートなし、手動キーのサポートなし)
  • Dapper Extensions (変更追跡なし、カスタムマッピング用のFluent config、複合キーのサポート、手動キー指定のサポート)、単純なクエリ用の述語システムも含まれます。
  • Dapper SimpleCRUD (変更追跡なし、カスタムマッピングの属性、複合キーのサポートなし、手動キー指定のサポート)、フィルタリング/ページングヘルパー、非同期サポート、自動POCOクラス生成(T4まで)

Dapperエクステンションの違い



ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow