4

Dapperを試しています。私はこれまでに見たものが好きです。単純なCRUDを実行するために、Dapper.rainbowを使用します。それは非常にうまく機能します。ただし、テーブルにIdという名前のID列がある場合にのみ機能します。そのようなdbを持つことは理にかなっていますが、Dapperを使用するためだけにデータベースの列名の変更を要求することはできません。より明確にするために、私はNorthwindDbのようなデータベースを使用しています。どこでもId列にテーブル名が繰り返されています。

これを処理するために、Dapper.Rainbowコードを次のように変更しました。

   public T Get(TId id,string idColumnName="Id")
        {
            return database.Query<T>("select * from " + TableName + " where               "+idColumnName+" = @id", new { id }).FirstOrDefault();
        }

列マッピング/注釈やまったく異なるものなど、これを処理するためのより良い方法はありますか?

私はこれらのような質問を読みました

クラスプロパティを使用して列名を手動でマップする

Dapper.Rainbow VS Dapper.Contrib

(私はDapper.Contribで同様の小さな問題に遭遇しました、私はそれを別に尋ねます)。

更新-答えが私のDapper.Rainbowの問題に当てはまるかどうかはわかりません(少なくとも、方法はわかりません)。

よろしくお願いします!

4

1 に答える 1

7

私も同様の問題を抱えていました。既存のDapper拡張機能は、私の理想的なパターンに適合しませんでした。何も追加せずに、スマートなデフォルトを使用した単純なCRUD操作が必要でした。また、データベースに直接マップされない追加のプロパティを持つモデルが必要でした。たとえば、GetterでFirstNameとLastNameを組み合わせたFullNameプロパティであり、InsertステートメントとUpdateステートメントにFullNameを追加しません。

ほとんどの場合、主キー列をIDにしたかったのですが、属性でオーバーライドできるようにしました。

最後に、テーブル名をデフォルトでクラス名と一致させたいが、属性でオーバーライドできるようにしました。

私はこれらの問題を解決するDapperへの独自の拡張機能を書くことになりました。そのGithubとNugetにあります。うまくいけば、それはあなたに役立つでしょう。

https://github.com/ericdc1/Dapper.SimpleCRUD

于 2013-03-14T05:45:04.160 に答える