未志

C#实体类代码生成小工具源码

前段时间在学习ASP.NET时经常重复做三层搭建这种没技术含量的活,最恶心的就是编写实体类了,再这样下去就要变成纯粹的码农了。上网搜集了一些资料后,使用C#制作了这个小工具。
其实网络上已经有很多网友编写了类似的工具,再强大一点的还有动软代码生成器等代码生成软件,所以你如果对我愿意多向这些丑代码抛几次媚眼,我可以肯定:你,不是码农。

有几点我觉得有必要提醒一下:


  • 代码很乱,所以你如果想看懂的话,可能需要多花点心思。

  • 你需要打开解决方案修改一下sqlConnectionString,使用Visual Studio 2008,而且只支持SQLServer。

  • 生成的代码只有主体部分,有以下三个部分的内容


  • 无参构造器

  • 有参构造器(带全部属性)

  • 字段

  • 方法



  • 在命名规则方面,遵循约定俗成的命名规则。但有一些个人习惯,所以你如果计划使用这个小工具,需要做一些修改,

    • 构造函数名使用表名+Data,比如public StudentData()

    • 所有的参数前面都加上了一个v,比如public void Method(String vName, int vAge)

    • 字段前加下划线_,比如private int _age



  • 如果你在SQLServer中对每个字段进行了说明,那么在带参构造器前可以进行注释。


  • 源文件下载地址:http://www.boxcn.net/shared/hs0fayxy7q
    贴上最主要的一个方法,生成实体类代码内容:

    ///
     /// 获取实体类代码 /// 
    
    ///要查询的表名
    /// 返回生成的实体类主体代码
    public string getDataTable(string tableName)
    {
        //打开数据库连接
        StringBuilder sb = new StringBuilder(); //保存封装后的代码
        using (SqlConnection con = new SqlConnection("server=" + SERVER + ";database="+this.cboDataBase.Text+";uid=" + UID + ";pwd=" + PWD))
        {
            con.Open();
            string selectQuery = "select * from [" + tableName+"]";
            SqlCommand command = new SqlCommand(selectQuery, con);
            SqlDataAdapter ad = new SqlDataAdapter(command);
            DataSet ds = new DataSet();
    
            ad.FillSchema(ds, SchemaType.Mapped);   //填充
    
            //构造器
            sb.Append("///
    " + Environment.NewLine + "/// 无参构造器" + Environment.NewLine + "/// 
    
    " + Environment.NewLine + "public " + getPascal(tableName) + "Data () { }" + Environment.NewLine + Environment.NewLine);
            sb.Append("///
    " + Environment.NewLine + "/// 带参构造函数" + Environment.NewLine + "/// 
    
    " + Environment.NewLine);
    
            //循环读取字段,进行构造器注释初始化
            foreach (DataColumn dc in ds.Tables[0].Columns)
            {
                sb.Append("///" + getDBDesc(dc.ColumnName) + "" + Environment.NewLine);
            }
            //有参构造器声明
            sb.Append("public " + getPascal(tableName) + "Data (");
    
            //有参构造器参数列表
            foreach (DataColumn dc in ds.Tables[0].Columns)
            {
                sb.Append(ChangeToCSharpType(dc.DataType.Name) + " v" + getPascal(dc.ColumnName)+", ");
            }
            sb.Remove(sb.Length - 2, 2);
            sb.Append(")"+Environment.NewLine+"{"+Environment.NewLine);
            //有参构造器内容
            foreach (DataColumn dc in ds.Tables[0].Columns)
            {
                sb.Append("\tthis." + getPascal(dc.ColumnName) + " = v" + getPascal(dc.ColumnName) + ";" + Environment.NewLine);
            }
            sb.Append(Environment.NewLine + "}" + Environment.NewLine + Environment.NewLine);
    
            //循环读取字段,进行字段属性封装
            foreach (DataColumn dc in ds.Tables[0].Columns)
            {
                sb.Append("private " + ChangeToCSharpType(dc.DataType.Name) + " " + getCamel(dc.ColumnName)+";" + Environment.NewLine);
                sb.Append("public " + ChangeToCSharpType(dc.DataType.Name) + " " + getPascal(dc.ColumnName) + Environment.NewLine);
    
                sb.Append("{" + Environment.NewLine);
                sb.Append("\tget{ return "+ getCamel(dc.ColumnName) + ";}" + Environment.NewLine);
                sb.Append("\tset{ " + getCamel(dc.ColumnName) + " = value;}" + Environment.NewLine);
                sb.Append("}" + Environment.NewLine + Environment.NewLine);
            }
            con.Close();
         }
        return sb.ToString();
    }