懶漢處理dapper欄位名與屬性名的對映方式

2021-07-27 17:48:00 字數 1845 閱讀 3244

你還以為走路是世上最簡單的事情呢?只不過是把乙隻腳放到另乙隻腳前面。但我一直很驚訝這些原本是本能的事情實際上做起來有多困難。而吃,吃也是一樣的,有些人吃起東西來可困難了。說話也是,還有愛。這些東西都可以很難。

--摘自蕾秋·喬伊斯《乙個人的朝聖》

開發過程中,資料表字段的命名並不規範,我在開發這個報表時重新定義了一下dto的屬性名。這時,sql裡就要用到as了。

public

static listgetduizhangbaobiao(zhifuduizhangbaobiaoquerymodel query, pagemodel pagemodel)

if (null != query.channelno && query.channelno.trim() != ""

)

var dp = new

object();

dp = new

; sql += "

order by a.zfdate desc";

using (var conn =connutility.gatewayconntion)

}

與前端的檢視頁聯調通過後,這樣的**可以fix了。

不過,上面的**其實是有**錯誤的——當日後重新命名zhifuduizhangbaobiaodto的orderpaydate、amount屬性時,很容易忽略這段sql文字裡的as。

那麼,為了能應對日後的擴充套件和重構,我採用了另一種方式,利用linq的expression表示式來讀取屬性名。

public

static listgetduizhangbaobiao(zhifuduizhangbaobiaoquerymodel query, pagemodel pagemodel)

', orderno, orderid, channelno, orderamount as '', orderst as '', mercode

from t_business_airorders a

where zfdate>=@datefr and zfdate<@dateto

and paytype>1 ";

sql = string.format(sql, getpropertyname(c =>c.orderpaydate),

getpropertyname

(c =>c.amount),

getpropertyname

(c =>c.orderstatus));

......

}

這裡借助了乙個getpropertyname方法。

public

static

string getpropertyname(expressionobject>>expr)

else

if (expr.body is

memberexpression)

else

if (expr.body is

parameterexpression)

return

rtn;

}

墨菲定律裡有說「會出錯的事總會出錯」。乙個在開發中的專案,經常因review或**分析而改一些**的。這樣就一勞永逸了。日後重構屬性名,我們就不用擔心這塊了。

btw,在mvc檢視頁裡,我們要顯示模型的顯示名稱,經常這樣寫@html.displaynamefor(model => model.orderpaydate),當屬性沒有displaynameattribute時,就會返回屬性名。

修改欄位名與修改字段資料型別

修改欄位名 有時,在我們建好一張表後會突然發現,哎呀!欄位名貌似寫錯了!怎麼辦?要刪了表再重新建乙個新錶嗎?還是要刪了這個欄位再新建乙個新的字段?都不用,mysql 中修改欄位名稱也有專門的語句,接近於自然語言,很好記憶。語法規則為 alter table 表名 change 舊欄位名 新欄位名 新...

獲取資料庫所有表名與欄位名

1.獲取所有資料庫名 select name from master.sysdatabases 2.獲取所有表名 select name from sysobjects where type u xtype u 表示所有使用者表 xtype s 表示所有系統表 3.獲取所有欄位名 select na...

在ADO下修改ACCESS欄位名的方法與思路

欄位名可以在access的視窗化操作介面或sql語句來進行修改,但在ado環境下,則不能修改,下面是變通的辦法 db.execute alter table 表 add cz temp text 50 新建臨時中轉欄位cz temp db.execute update 表 set cz temp a...