• "动软.Net代码生成器"的一次扩展经历


          一直很喜欢用李天平的“动软.Net代码生成器”,界面简洁、操作简单,用来开发辅助生成代码和生成Word文档,大大提高效率。唯一不喜欢的是实体层变量命名方式采用了变量用“_”+数据库字段名方式,属性名采用数据库字段名方式,个人更喜欢用变量首字母小写属性首字母大写的方式。国庆假期闲来无事,决定改造下生成实体层的方法,让其按照自己的习惯来命名,感谢李天平对代码生成器的开源,才使这次改造成为可能。

          很容易就找到了实体层生成的类和方法LTP.BuilderModel.BuilderModel.CreatModelMethod(),去掉变量名前面的下划线很简单,直接删除即可,遇到的一个难题是如何把属性名的首字母变成大写,首先想到的是利用正则表达式。对正则表达式真是既爱又恨,爱是因为功能强大,处理文本问题几乎无所不能,恨是因为自己对正则表达式一直是一知半解,虽然专门学过几次,可由于求知欲不强加上悟性不够,一直没能理解正则表达式的本质,每次用到都要借助网络。这次网络没能帮助我,倒是意外的发现了用C#字符串很容易就能实现首字母大写,只要一条语句即可string propertyColumnName = columnName.Substring(0, 1).ToUpper() + columnName.Substring(1)。是自己把问题想复杂了。完整的改造代码如下:

    生成实体类的属性
    /// <summary>
    /// 生成实体类的属性
    /// </summary>
    /// <returns></returns>
    public string CreatModelMethod()
    {
    StringPlus strclass
    = new StringPlus();
    StringPlus strclass1
    = new StringPlus();
    StringPlus strclass2
    = new StringPlus();
    //strclass.AppendSpaceLine(2, "#region Model");
    strclass1.AppendSpaceLine(2, "");
    strclass2.AppendSpaceLine(
    2, "");
    foreach (ColumnInfo field in Fieldlist)
    {
    string columnName = field.ColumnName;
    string columnType = field.TypeName;
    bool IsIdentity = field.IsIdentity;
    bool ispk = field.IsPK;
    bool cisnull = field.cisNull;
    string deText = field.DeText;
    columnType
    = CodeCommon.DbTypeToCS(columnType);
    string isnull = "";
    if (CodeCommon.isValueType(columnType))
    {
    //if ((!IsIdentity) && (!ispk) && (cisnull))
    //{
    // isnull = "?";//代表可空类型
    //}
    }
    //变量直接用数据库字段名
      string privateColumnName = columnName;
    //属性名需要把数据库字段名首字母大写
    string propertyColumnName = columnName.Substring(0, 1).ToUpper() + columnName.Substring(1);

    strclass1.AppendSpaceLine(
    2, "private " + columnType + isnull + " " + privateColumnName + ";");//私有变量
    strclass2.AppendSpaceLine(2, "/// <summary>");
    strclass2.AppendSpaceLine(
    2, "/// " + deText);
    strclass2.AppendSpaceLine(
    2, "/// </summary>");
    strclass2.AppendSpaceLine(
    2, "public " + columnType + isnull + " " + propertyColumnName);//属性
    strclass2.AppendSpaceLine(2, "{");
    strclass2.AppendSpaceLine(
    3, "set {" + privateColumnName + "=value;}");
    strclass2.AppendSpaceLine(
    3, "get {return " + privateColumnName + ";}");
    strclass2.AppendSpaceLine(
    2, "}");
    }
    strclass.Append(strclass1.Value);
    strclass.Append(strclass2.Value);
    //strclass.AppendSpaceLine(2, "#endregion Model");

    return strclass.ToString();
    }

          重新编译项目,将LTP.BuilderModel.dll替代原安装目录中的dll,打开代码生成器生成代码,生成的实体层变成自己习惯的命名规则了^_^。其实这次改造并不难,但有两点体会:一是开源真的很方便,可以按需修改,满足自己或者说是开发团队的需求;二是C#(语言)基础要好好掌握,不能一遇到问题就求助网络,先从基础着手解决问题,改掉思维定势

  • 相关阅读:
    jmeter怎么衡量tps的值
    QPS、TPS、并发用户数、吞吐量关系
    PPAPI插件开发指南
    WebRTC手记之WebRtcVideoEngine2模块
    WebRTC手记Channel概念
    WebRTC手记之本地音频采集
    WebRTC手记之本地视频采集
    WebRTC手记之框架与接口
    WebRTC手记之初探
    Chromium的GPU进程启动流程
  • 原文地址:https://www.cnblogs.com/freshman0216/p/1840750.html
Copyright © 2020-2023  润新知