欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

【干货分享】C# 实体类生成工具

程序员文章站 2022-05-26 14:20:25
前言: 项目实战中不论是业务编码还是通用编码,总会归纳出一些通用的工具类。放入项目中一劳永逸,让兄弟姐妹们避免编写重复代码。所以利用了工作之余的时间,将这些散落在多个项目中精致优雅的工具类,归纳起来形成工程,方便后续工作的使用和便捷开发。 根据实际需求,编写了此工具。目前只支持SQLServer数据 ......

前言

  项目实战中不论是业务编码还是通用编码,总会归纳出一些通用的工具类。放入项目中一劳永逸,让兄弟姐妹们避免编写重复代码。所以利用了工作之余的时间,将这些散落在多个项目中精致优雅的工具类,归纳起来形成工程,方便后续工作的使用和便捷开发。

根据实际需求,编写了此工具。目前只支持sqlserver数据库,不过我自己有时间也会完成其他数据库支持的,有兴趣的读者可以继续扩展支持其他数据库。

功能

1能自动获得用户数据库中的所有数据表;
2能根据用户所选的数据表,自动生成实体类
3能自动产生 c# 实体类的(*.cs)代码文件;

实体工具

一、界面截图:

【干货分享】C# 实体类生成工具

二、sql语句部分代码

----1. 获取所有的数据库名-----
select name from master.dbo.sysdatabases order by name

-----2. 获取所有的表名------
select name from sysobjects where xtype='u' order by name
--xtype='u':表示所有用户表;
--xtype='s':表示所有系统表;
select name from sysobjects where type = 'u' and sysstat = '83'
----注意:一般情况只需要type = 'u',但有时候会有系统表混在其中(不知道什么原因),加上后面一句后就能删除这些系统表了。

三、c#部分代码

        /// <summary>
        /// 获取所有数据库
        /// </summary>
        /// <param name="connection"></param>
        /// <returns></returns>
        public static list<dbtable> getalldatabasename(string connection)
        {
            list<dbtable> dic = new list<dbtable>();
            string connstring = "select name from master.sys.sysdatabases order by name";
            sqlconnection connect = new sqlconnection(connection);
            sqlcommand cmd = new sqlcommand(connstring, connect);
            try
            {
                if (connect.state == connectionstate.closed)
                {
                    connect.open();
                    idatareader dr = cmd.executereader();
                    dic.clear();
                    while (dr.read())
                    {
                        dic.add(new dbtable { value = dr["name"].tostring(), key = dr["name"].tostring() });
                    }
                    dr.close();

                }
            }
            catch (exception ex)
            {
                 throw new aggregateexception("获得数据库地址错误,你想上天吗?");
            }
            finally
            {
                if (connect != null && connect.state == connectionstate.open)
                {
                    connect.dispose();
                }
            }
            return dic;
        }
        /// <summary>
        /// 写文件
        /// </summary>
        /// <param name="filename">文件完整路径</param>
        /// <param name="content">内容</param>
        private static void writeandsave(string filename, string content)
        {
            //实例化一个文件流--->与写入文件相关联
            using (var fs = new filestream(filename, filemode.create, fileaccess.write))
            {
                //实例化一个streamwriter-->与fs相关联
                using (var sw = new streamwriter(fs))
                {
                    //开始写入
                    sw.write(content);
                    //清空缓冲区
                    sw.flush();
                    //关闭流
                    sw.close();
                    fs.close();
                }
            }
        }

工具下载

实体类生成工具[下载]

总结

1.避免编写重复代码,编写此工具生成实体类快速开发。

2.这类工具在网上已有不少,但是自己可以归纳起来形成工程,放入项目中,不仅自己从中可以学到新的知识也同时提升了自己的总结归纳能力。

3.此工具还未完善,只支持sqlserver数据库,不过我自己有时间也会完成其他数据库支持的,有兴趣的读者可以继续扩展支持其他数据库。

4.如果有不对的或不理解的地方,希望大家可以多多指正,提出问题,才能站在更多用户角度,编写了出更便捷实用的工具。