72

Dapper.RainbowとDapper.Contribの違いを誰かに説明してもらえますか?

つまり、Dapper.ContribのSqlMapperExtensions.csをいつ使用し、Dapper.Rainbowをいつ使用する必要があるのでしょうか。

4

3 に答える 3

82

私はしばらくの間 Dapper を使用してきましたが、ContribRainbowプロジェクトは自分自身について何を意味するのか疑問に思っていました。少しコードを見直した後、それらの使用に関する私の考えは次のとおりです。

Dapper.Contrib

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

  • 得る
  • 入れる
  • アップデート
  • 消去

Contrib の重要なコンポーネントは、エンティティが変更が行われたかどうかを識別するための追跡を提供することです。

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

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

主な警告: Contrib の追跡機能を利用するには、型制約としてインターフェイスを使用して、プロキシ クラスを生成できるようにする必要があります。

Dapper.レインボー

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

  • 得る
  • 入れる
  • アップデート
  • 消去

First (テーブルの最初のレコードを取得する) や All (テーブルのすべての結果レコードを取得する) などの一般的に使用されるメソッドと同様に。

すべての意図と目的において、Rainbow は基本的に、最も一般的に使用されるデータベース インタラクションのラッパーであり、プロパティ名と型の制約に基づいて退屈な SQL を構築します。

たとえば、Get 操作では、Rainbow は通常の SQL クエリを作成し、すべての列を返し、それらの値を制約として使用される型にマップし直します。

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

主な警告: Rainbow は、すべてのテーブルに「Id」という名前の ID 列があることを想定しています。

違いは?

Contrib と Rainbow の主な違いは (IMO) で、一方はエンティティへの変更を追跡し、もう一方は追跡しません:

  • エンティティの変更を追跡できるようにする場合は、Contrib を使用します。
  • 標準の ADO.NET アプローチに沿ってさらに何かを使用する場合は、Rainbow を使用します。

余談ですが、Dapper で使用する非常によく似た基本クラスを作成したので、以前に Rainbow を調べていたらよかったのにと思います。


@anthonyv が引用した記事と引用文から:データベースにデータを取得するという厄介な INSERT 問題

( Rainbow 以外に) (CRUD 用に) Dapper.ContribDapper Extensionsから選択できる他の 2 つの API もあります。画一的なものではないと思います。問題と好みによっては、最適な API が存在する場合があります。いくつかのオプションを提示しようとしました。世界のすべての問題を解決するための祝福された「最良の方法」はありません。

サムが上記の引用と関連するブログ投稿で伝えようとしていたことは次のとおりだと思います。シナリオには多くのカスタム マッピングが必要になる場合があります (バニラの Dapper を使用)、またはエンティティの変更を追跡する必要がある場合があります (Contrib を使用します)。一般的な使用シナリオ (Rainbow を使用) を使用するか、それらすべてを組み合わせて使用​​することができます。または、Dapper を使用しません。YMMV。

于 2012-10-24T15:14:02.273 に答える
34

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

  • Dapper Contrib (自動変更追跡 - ダーティかどうかのみ、カスタム マッピングの属性、複合キー サポートなし、手動キー サポートなし)
  • Dapper Rainbow (Snapshotter を使用した手動の変更追跡、カスタム マッピングの属性、複合キーのサポートなし、手動キーのサポートなし)
  • Dapper 拡張機能(変更追跡なし、カスタム マッピング用の流暢な構成、複合キーをサポート、手動キー仕様をサポート)、単純なクエリ用の述語システムも含まれています (注:非推奨- 最近の Dapper バージョンも .NET コアもサポートしていません) 。
  • Dapper SimpleCRUD (変更追跡なし、カスタム マッピングの属性、複合キー サポートなし、手動キー指定をサポート)、フィルタリング/ページング ヘルパー、非同期サポート、自動 POCO クラス生成 (T4 経由) も含まれます

Dapper 拡張機能の違い

于 2016-10-24T13:27:38.460 に答える
3

Sam は、彼の投稿 ( http://samsaffron.com/archive/2012/01/16/that-annoying-insert-problem-getting-data-into-the-db-using-dapper ) で違いを詳しく説明しています。

基本的に、すべての回答に対応するサイズは通常 1 つではありません。お客様のニーズに基づいて、どのアプローチを採用するかを決定するのは私たち次第です。

( Rainbow 以外に) (CRUD 用に) Dapper.ContribDapper Extensionsから選択できる他の 2 つの API もあります。画一的なものではないと思います。問題と好みによっては、最適な API が存在する場合があります。いくつかのオプションを提示しようとしました。世界のすべての問題を解決するための祝福された「最善の方法」はありません。

于 2012-05-10T02:07:42.427 に答える