如何用nodejs給C#寫(xiě)一個(gè)數(shù)據(jù)表的實(shí)體類(lèi)生成工具
雖然微軟提供了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
然后用查詢(xún)出表結(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ù)類(lèi)型做了對(duì)應(yīng)的C#類(lèi)型映射。
然后使用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í)體類(lèi)生成工具的詳細(xì)內(nèi)容,更多關(guān)于nodejs的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
了不起的node.js讀書(shū)筆記之node的學(xué)習(xí)總結(jié)
這篇文章主要介紹了了不起的node.js讀書(shū)筆記之node的學(xué)習(xí)總結(jié),需要的朋友可以參考下2014-12-12輕松創(chuàng)建nodejs服務(wù)器(6):作出響應(yīng)
這篇文章主要介紹了輕松創(chuàng)建nodejs服務(wù)器(6):作出響應(yīng),我們接著改造服務(wù)器,讓請(qǐng)求處理程序能夠返回一些有意義的信息,需要的朋友可以參考下2014-12-12node和vue實(shí)現(xiàn)商城用戶(hù)地址模塊
這篇文章主要為大家詳細(xì)介紹了node和vue實(shí)現(xiàn)商城用戶(hù)地址模塊,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-12-12Ajax獲取node服務(wù)器數(shù)據(jù)的完整步驟
這篇文章主要給大家介紹了關(guān)于Ajax獲取node服務(wù)器數(shù)據(jù)的完整步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09npm安裝windows-build-tools卡在Successfully?installed?Python2.7
這篇文章主要介紹了npm安裝windows-build-tools卡在Successfully?installed?Python2.7的問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-10-10sublime text配置node.js調(diào)試(圖文教程)
下面小編就為大家分享一篇sublime text配置node.js調(diào)試(圖文教程),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2017-11-11Node實(shí)現(xiàn)前端本地開(kāi)發(fā)接口代理服務(wù)
本文主要介紹了Node實(shí)現(xiàn)前端本地開(kāi)發(fā)接口代理服務(wù),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-05-05簡(jiǎn)單好用的nodejs 爬蟲(chóng)框架分享
使用nodejs開(kāi)發(fā)爬蟲(chóng)半年左右了,爬蟲(chóng)可以很簡(jiǎn)單,也可以很復(fù)雜。簡(jiǎn)單的爬蟲(chóng)定向爬取一個(gè)網(wǎng)站,可能有個(gè)幾萬(wàn)或者幾十萬(wàn)的頁(yè)面請(qǐng)求,今天給大家介紹這款非常好用的爬蟲(chóng)框架crawl-pet2017-03-03