使用 ORM通常第一步就是建立和資料庫對應的資料類別
如果是用 Entity Framework的話,用精靈應該可以自動建立對應
而 Dapper 的話就需要自己去對應
如果資料庫欄位少的話 多做幾次複製貼上就好
只是多的話就覺得很煩。
參考了 mrkt 的程式學習筆記-前輩的 文章
Dapper - 使用 LINQPad 快速產生相對映 SQL Command 查詢結果的類別
裡面有提到另一位作者的文章
Generating .NET POCO Classes for SQL Query Results -- Visual Studio Magazine
by Joe Kunk
參考了做法。因為註解內容 我想要不同的資訊
所以自己做了一個 MySQLQueryResults
目前功能很簡單,登入資料庫後會自動抓取 Table 和 View
選取的話會自動產生簡單的指令
不想要註解 就不要勾選添加註解
最後產生類別,就會有C#用的類別出現(自己去複製貼上吧)
目前簡單提供 Ver 1,會額外做這軟體的原因是,想要多試試看一些SQL指令
未來有需求的話,可能會挖出來做修改更新,添加一些指令的功能測試進去
感覺沒貼些程式上來,好像怪怪的
貼個兩段寫的時候比較 個人比較特別注意到的
using (var cmd = _connection.CreateCommand()) { // 抓取 Table 和 View cmd.CommandText = "select name from sysobjects where xtype='U' OR xtype='V'"; using (var reader = cmd.ExecuteReader()) { while (reader.Read()) { if (reader["name"].ToString().CompareTo("sysdiagrams") == 0) continue; TableCB.Items.Add((reader.GetString(0))); } } }
這段的 注意事項事 xtype='U' 跟 xtype='V',分別對應的是 Table和 View ,需要知道其他內容的話請自行Google
而 跳過 sysdiagrams 是因為這是資料庫圖表 建立類別的時候不需要這資訊
另一小段,簡單的抓出 Table的名稱 當作是類別的名稱
// 不知道LINQ 是否有方法組合,先跑迴圈抓名稱 if (CommandSplit.Contains("from")) { bool bNext = false; foreach (string strOne in CommandSplit) { if (bNext) { // 先用一個名稱就好 _strClassName = strOne; break; } if ("from" == strOne) bNext = true; } }
利用空白將 SqlCommand的字串分割 Split
因為要抓出 from下一個字串出來,但沒研究出 Linq該如何去查詢
我知道可以找出from是位於 Strin[] 的哪個位置
但是我需要的是 +1 後的位置。因為對 Linq熟悉度沒那麼高
所以就先這樣寫,未來如果有研究出 Linq的做法,再把這小段簡化
也歡迎各位提供Linq的做法來討論