您好,登录后才能下订单哦!
这篇文章将为大家详细讲解有关怎么用nodejs给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文件了。
因为我表不多,我就单个生成就行了。如果要扩展出整个数据库都生成,可以再写几行代码就能整个库都生成了!
关于“怎么用nodejs给C#写一个数据表的实体类生成工具”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。