用node.js給C#寫一個數據表的實體類生成工具

雖然微軟提供了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

相關文章
相關標籤/搜索