雖然微軟提供了T4模板,可是我感受很是難用。哪兒比得上直接用腳原本寫模板來的爽。node
由於要給一個老項目作周邊的工具,須要鏈接到數據庫。sql
我習慣性用EntityFrameworkCore來作,由於畢竟從出道開始就一直在用的一個ORM。數據庫
EF6時代,vs提供了dbfirst,可是隻是針對sqlserver好像。npm
由於此次的數據庫是MySQL,因此vs不少東西都支持不夠了。工具
可是支持不夠就本身動手豐衣足食嘛。sqlserver
咱們使用ejs這個模板引擎來作生成器。post
npm install ejs
而後用查詢出表結構:spa
b.query('desc posts').then(res => { })
而後編寫模板,ejs的模板語法和aspx時代的時候的模板語法很類似,都是尖括號+百分號這樣的風格<%%>,相信有aspx開發經驗的老鐵們對這個模板引擎仍是很習慣的code
using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; namespace 你的命名空間 { public class <%= table -%> { <% rows.forEach(function(row){ -%> <% if(row.Type.indexOf('bigint')!=-1){ -%> public long <%= row.Field %> { get; set; } <% } -%> <% if(row.Type.indexOf('datetime')!=-1){ -%> public DateTime <%= row.Field %> { get; set; } <% } -%> <% if(row.Type.indexOf('varchar')!=-1){ -%> public string <%= row.Field %> { get; set; } <% } -%> <% if(row.Type.indexOf('mediumtext')!=-1){ -%> public string <%= row.Field %> { get; set; } <% } -%> <% if(row.Type.indexOf('bit')!=-1){ -%> public bool <%= row.Field %> { get; set; } <% } -%> <% if(row.Type.indexOf('longtext')!=-1){ -%> public string <%= row.Field %> { get; set; } <% } -%> <% }); -%> } }
以上的模板中,針對不一樣的MySQL數據類型作了對應的C#類型映射。server
而後使用ejs來渲染出一個文本,最後保存到文件夾中就ok了
var tableName = '表名字'; //對應的模板中的class名字和生成的cs文件的名字 ejs.renderFile('./template/posts.ejs', { rows: res.rows, 'table': tableName}, (err, str) => { if (err) { console.error(err); } else { let temp = path.join(__dirname, 'temp'); var exist = fs.existsSync(temp) if (!exist) { fs.mkdirSync() } fs.writeFile(path.join(temp, tableName+'.cs'), str, (err) => { if (err) { console.error(err); } else { console.log('生成模板成功'); } }) } })
使用node執行一下,就能生成出一個cs文件了。
由於我表很少,我就單個生成就好了。若是要擴展出整個數據庫都生成,能夠再寫幾行代碼就能整個庫都生成了!
須要交流的老鐵們能夠點擊博客下邊的連接或直接搜索羣號加入QQ羣:545594312