Dapper.RainbowとDapper.Contribの違いを誰かに説明してもらえますか?
つまり、Dapper.ContribのSqlMapperExtensions.csをいつ使用し、Dapper.Rainbowをいつ使用する必要があるのでしょうか。
Dapper.RainbowとDapper.Contribの違いを誰かに説明してもらえますか?
つまり、Dapper.ContribのSqlMapperExtensions.csをいつ使用し、Dapper.Rainbowをいつ使用する必要があるのでしょうか。
私はしばらくの間 Dapper を使用してきましたが、ContribとRainbowプロジェクトは自分自身について何を意味するのか疑問に思っていました。少しコードを見直した後、それらの使用に関する私の考えは次のとおりです。
Contrib は、基本的な CRUD 操作のために IDbConnection インターフェースで一連の拡張メソッドを提供します。
Contrib の重要なコンポーネントは、エンティティが変更が行われたかどうかを識別するための追跡を提供することです。
たとえば、型制約としてインターフェイスで Get メソッドを使用すると、変更されたプロパティを追跡する内部ディクショナリを含む動的に生成されたプロキシ クラスが返されます。
次に、変更されたプロパティのみを更新するために必要な SQL を生成する Update メソッドを使用できます。
主な警告: Contrib の追跡機能を利用するには、型制約としてインターフェイスを使用して、プロキシ クラスを生成できるようにする必要があります。
Rainbow は、基本的な CRUD 操作を提供するために Dapper クラスの基本クラスとして使用できる抽象クラスです。
First (テーブルの最初のレコードを取得する) や All (テーブルのすべての結果レコードを取得する) などの一般的に使用されるメソッドと同様に。
すべての意図と目的において、Rainbow は基本的に、最も一般的に使用されるデータベース インタラクションのラッパーであり、プロパティ名と型の制約に基づいて退屈な SQL を構築します。
たとえば、Get 操作では、Rainbow は通常の SQL クエリを作成し、すべての列を返し、それらの値を制約として使用される型にマップし直します。
同様に、挿入/更新メソッドは、型制約のプロパティ名に基づいて、挿入/更新に必要な SQL を動的に構築します。
主な警告: Rainbow は、すべてのテーブルに「Id」という名前の ID 列があることを想定しています。
Contrib と Rainbow の主な違いは (IMO) で、一方はエンティティへの変更を追跡し、もう一方は追跡しません:
余談ですが、Dapper で使用する非常によく似た基本クラスを作成したので、以前に Rainbow を調べていたらよかったのにと思います。
@anthonyv が引用した記事と引用文から:データベースにデータを取得するという厄介な INSERT 問題
( Rainbow 以外に) (CRUD 用に) Dapper.ContribとDapper Extensionsから選択できる他の 2 つの API もあります。画一的なものではないと思います。問題と好みによっては、最適な API が存在する場合があります。いくつかのオプションを提示しようとしました。世界のすべての問題を解決するための祝福された「最良の方法」はありません。
サムが上記の引用と関連するブログ投稿で伝えようとしていたことは次のとおりだと思います。シナリオには多くのカスタム マッピングが必要になる場合があります (バニラの Dapper を使用)、またはエンティティの変更を追跡する必要がある場合があります (Contrib を使用します)。一般的な使用シナリオ (Rainbow を使用) を使用するか、それらすべてを組み合わせて使用することができます。または、Dapper を使用しません。YMMV。
Adam Anderson によるこの投稿では、いくつかの CRUD Dapper 拡張ライブラリの違いについて説明しています。
Sam は、彼の投稿 ( http://samsaffron.com/archive/2012/01/16/that-annoying-insert-problem-getting-data-into-the-db-using-dapper ) で違いを詳しく説明しています。
基本的に、すべての回答に対応するサイズは通常 1 つではありません。お客様のニーズに基づいて、どのアプローチを採用するかを決定するのは私たち次第です。
( Rainbow 以外に) (CRUD 用に) Dapper.ContribとDapper Extensionsから選択できる他の 2 つの API もあります。画一的なものではないと思います。問題と好みによっては、最適な API が存在する場合があります。いくつかのオプションを提示しようとしました。世界のすべての問題を解決するための祝福された「最善の方法」はありません。