既存のデータベーススキーマを持つDapper.Rainbow

c# dapper dapper-rainbow

質問

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

これを処理するために、私は以下のように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問題に答えが当てはまるかどうかは不明です(Atleast、私は見えません)。

事前に助けてくれてありがとう!

受け入れられた回答

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

ほとんどの場合、プライマリキーの列がIdであることを望みましたが、属性でオーバーライドできるようにしました。

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

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

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



ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ