質問: 誰かが**Dapper.Rainbow**と**Dapper.Contribの**違いを説明できますか? 私はDapper.ContribのSqlMapperExtensions.csをいつ使用するのですか?Dapper.Rainbowをいつ使うべきですか?
回答: 私は今Dapperをしばらく使っていて、 ContribとRainbowのプロジェクトが自分自身について何であるか疑問に思っています。少しのコードレビューの後、ここで私の考え方をご紹介します: 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.Contrib**と**Dapper Extensionの** 2つのAPIが用意されています。私はそれがすべてに合っているとは思わない。あなたの問題や好みに応じて、最適なAPIがあるかもしれません。私はいくつかのオプションを提示しようとしました。世界のあらゆる問題を解決するための恵まれた方法はありません。 > > 私は、サムが上の引用で伝えようとしていることを疑っています。関連するブログ記事は次のとおりです:あなたのシナリオには多くのカスタムマッピングが必要かもしれません(vanilla Dapperを使う)か、 (Rainbowを使用する)一般的な使用シナリオを持っているか、それらをすべて組み合わせて使用することができます。 Dapperを使うことさえありません。 YMMV。