如何用nodejs給C#寫(xiě)一個(gè)數(shù)據(jù)表的實(shí)體類生成工具
雖然微軟提供了T4模板,但是我感覺(jué)非常難用。哪兒比得上直接用腳本來(lái)寫(xiě)模板來(lái)的爽。
因?yàn)橐o一個(gè)老項(xiàng)目做周邊的工具,需要連接到數(shù)據(jù)庫(kù)。
我習(xí)慣性用EntityFrameworkCore來(lái)做,因?yàn)楫吘箯某龅篱_(kāi)始就一直在用的一個(gè)ORM。
EF6時(shí)代,vs提供了dbfirst,但是只是針對(duì)sqlserver好像。
因?yàn)檫@次的數(shù)據(jù)庫(kù)是MySQL,所以vs很多東西都支持不夠了。
但是支持不夠就自己動(dòng)手豐衣足食嘛。
我們使用ejs這個(gè)模板引擎來(lái)做生成器。
npm install ejs
然后用查詢出表結(jié)構(gòu):
b.query('desc posts').then(res => {
})
然后編寫(xiě)模板,ejs的模板語(yǔ)法和aspx時(shí)代的時(shí)候的模板語(yǔ)法很相似,都是尖括號(hào)+百分號(hào)這樣的風(fēng)格<%%>,相信有aspx開(kāi)發(fā)經(jīng)驗(yàn)的老鐵們對(duì)這個(gè)模板引擎還是很習(xí)慣的
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; }
<% } -%>
<% }); -%>
}
}
以上的模板中,針對(duì)不同的MySQL數(shù)據(jù)類型做了對(duì)應(yīng)的C#類型映射。
然后使用ejs來(lái)渲染出一個(gè)文本,最后保存到文件夾中就ok了
var tableName = '表名字'; //對(duì)應(yīng)的模板中的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執(zhí)行一下,就能生成出一個(gè)cs文件了。
因?yàn)槲冶聿欢?,我就單個(gè)生成就行了。如果要擴(kuò)展出整個(gè)數(shù)據(jù)庫(kù)都生成,可以再寫(xiě)幾行代碼就能整個(gè)庫(kù)都生成了!
以上就是如何用nodejs給C#寫(xiě)一個(gè)數(shù)據(jù)表的實(shí)體類生成工具的詳細(xì)內(nèi)容,更多關(guān)于nodejs的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Node.js中使用計(jì)時(shí)器定時(shí)執(zhí)行函數(shù)詳解
這篇文章主要介紹了Node.js中使用計(jì)時(shí)器定時(shí)執(zhí)行函數(shù)詳解,本文使用了Node.js中的setTimeout和setInterval函數(shù),需要的朋友可以參考下2014-08-08
使用node.js半年來(lái)總結(jié)的 10 條經(jīng)驗(yàn)
從3月初來(lái)到帝都某創(chuàng)業(yè)公司的服務(wù)器團(tuán)隊(duì)實(shí)習(xí),到現(xiàn)在已接近半年的時(shí)間。PS: 已轉(zhuǎn)正,服務(wù)器端用的 Node。2014-08-08
node?NPM庫(kù)增強(qiáng)版globby?Promise使用學(xué)習(xí)
這篇文章主要為大家介紹了node?NPM庫(kù)增強(qiáng)版globby?Promise使用學(xué)習(xí),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-07-07
使用express搭建一個(gè)簡(jiǎn)單的查詢服務(wù)器的方法
本篇文章主要介紹了使用express搭建一個(gè)簡(jiǎn)單的查詢服務(wù)器的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-02-02

