• 用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

  • 相关阅读:
    Linux文件编辑器 vi
    Sudo 和 Root 帐号
    Linux基本命令篇的习题解答
    Linux应用篇
    VMware中虚拟机网卡的四种模式
    Ubuntu游戏集合
    Linux与Window文件共享
    Linux知识点滴II
    [转载][翻译]jQuery Mobile教程创建一个订餐web应用(下)
    在WPF中创建带有刻度线的滑动条
  • 原文地址:https://www.cnblogs.com/boxrice/p/11735298.html
Copyright © 2020-2023  润新知