Generating class by ADO.Net

  • 76
  • 0

目前有種狀況是已存在一個Table, 現在新系統想要使用它。

之前我們都是自己依據table欄位, 自己手動加class補property。

而這次的table欄位有60個, 自己手動補class效率有點低。

所以就興起自製一個工具來幫忙做這件事。

目前有種狀況是已存在一個Table, 現在新系統想要使用它。

之前我們都是自己依據table欄位, 自己手動加class補property。

而這次的table欄位有60個, 自己手動補class效率有點低。

所以就興起自製一個工具來幫忙做這件事。

我想網路上應該也有現成的專案或是用Entiry Frarmework等框架提供的tool, 但其實就想自己實作些東西,順便檢視一下自己。

首先, 公司底層是用dapper, 只要產生同table名稱的class,以及同db field名稱的Property,

應該就可以滿足需求了(不考慮attribute)。

大體上是使用DbProviderFatories.GetFactory, 產生不同資料庫driver實作的 DbProviderFactory

 產生IDbConnection 物件補上connectionString就可以進行資料庫連線了。

這邊其實要注意的是, 如果沒有安裝官方的driver,是直接放dll到bin底下

在config裡要設置System.Data  的DbProviderFactories區塊設置好ProviderName與dll的對應。

然而其實我不是很清楚各個資料庫裡的系統資料表描述schema的table是哪些。

我是透過官方擷取資料庫結構描述的文章,是用DbConnection.GetSchema()加上一些限制的變數取得資料表描述。

有些這些資訊就可以輸出成檔案了。

目前測試過SqlClient 以及 Mysql.Data都能正常使用, DB2還需要調整程式的寫法才有辦法使用。

另外property都是輸出成string的型別,還需要補上依據不同的資料庫欄位型別輸出成不同欄位型別的處理。

程式碼

參考資料:

DbProviderFactory

擷取資料庫結構描述資訊