2013-03-09 61 views
4

我正在嘗試Dapper。我喜歡迄今爲止所看到的。爲了做簡單的CRUD,我使用Dapper.rainbow。它工作得很好。但是,只有該表具有名稱爲的標識列ID纔有效。有這樣的數據庫是有道理的,但我不能僅僅爲了使用Dapper而要求數據庫中的列名更改。更清楚的是,我正在使用像Northwind Db這樣的數據庫。它在每個ID列中都有重複的表名。Dapper.Rainbow與現有數據庫架構

爲了處理這個問題,我爲如下的Dapper.Rainbow代碼:

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

有沒有更好的方式來處理這個如列映射/註解或完全不同的東西?

我看過像這樣的

問題Manually Map column names with class properties

Dapper.Rainbow VS Dapper.Contrib

(我碰到類似的小問題來了Dapper.Contrib,我會問它分開)。

更新 - 不確定是否答案適用於我的Dapper.Rainbow問題(Atleast,我看不出如何)。

感謝您的幫助!

+0

看起來像一個非常可行的方法給我。 – 2013-03-13 16:18:36

回答

7

我有類似的問題。現有的Dapper擴展並不適合我的理想模式。我希望簡單的CRUD操作具有智能默認值,而不需要額外的東西。我也想讓模型具有不直接映射到數據庫的附加屬性。例如 - 在其getter中組合FirstName和LastName的FullName屬性,而不是將FullName添加到Insert和Update語句。

我想在大多數情況下主鍵列是Id,但允許覆蓋一個屬性。

最後,我希望表名與默認的類名匹配,但允許用屬性重寫。

我最終寫了自己的擴展到Dapper,解決了這些問題。它在Github和Nuget上。希望這會對你有所幫助。

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

+0

這裏有nuget包嗎? – Yogiraj 2013-03-15 17:33:59

+1

是的。 https://nuget.org/packages/Dapper.SimpleCRUD – ericdc 2013-03-15 23:24:58

+0

T4也有一個包裝。 https://nuget.org/packages/Dapper.SimpleCRUD.ModelGenerator/ – ericdc 2013-03-15 23:26:16