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

雖然微軟提供了T4模板,但是我感覺非常難用。哪兒比得上直接用腳本來寫模板來的爽。

因爲要給一個老項目做周邊的工具,需要連接到數據庫。

我習慣性用EntityFrameworkCore來做,因爲畢竟從出道開始就一直在用的一個ORM。

EF6時代,vs提供了dbfirst,但是隻是針對sqlserver好像。

因爲這次的數據庫是MySQL,所以vs很多東西都支持不夠了。

但是支持不夠就自己動手豐衣足食嘛。


 

我們使用ejs這個模板引擎來做生成器。

npm install ejs

然後用查詢出表結構:

b.query('desc posts').then(res => {

})

然後編寫模板,ejs的模板語法和aspx時代的時候的模板語法很相似,都是尖括號+百分號這樣的風格<%%>,相信有aspx開發經驗的老鐵們對這個模板引擎還是很習慣的

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#類型映射。

然後使用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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章