zoukankan      html  css  js  c++  java
  • 动软.Net代码生成器生成Model插件,适用于Silverlight创建NotifyPropertyChange类

    Silverlight创建继承INotifyPropertyChanged接口的类会产生大量如下代码:

    代码
    /// <summary>
    /// 说明
    /// </summary>
    public string description
    {
    get { return _description; }
    set
    {
    if (_description != value)
    {
    _description
    = value;
    NotifyPropertyChanged(
    "description");
    }
    }
    }

    虽然VS的CodeSnippets已经能够简化大量代码输入
    但用惯了Codematic从数据库直接生成Model类,感觉CodeSnippets还是效率太低
    于是修改了Codematic的BuilderModel组件,使生成Model代码支持Silverlight的需求
    感谢李天平大哥对Codematic的开源:)

    插件下载地址:https://files.cnblogs.com/zhlei616/BuilderModelSilverlight.rar

    下载后将解压包里的LTP.BuilderModel.dll覆盖Codematic安装目录下的同名文件即可
    覆盖前请先备份原文件,需要时再替换回来

    动软.NET代码生成器官方网站:http://www.maticsoft.com/

    BuilderModel修改后的代码
    public class BuilderModel : IBuilder.IBuilderModel
    {
    #region 公有属性
    protected string _modelname=""; //model类名
    protected string _namespace = "Maticsoft"; //顶级命名空间名
    protected string _modelpath="";//实体类的命名空间
    protected List<ColumnInfo> _fieldlist;

    /// <summary>
    /// 顶级命名空间名
    /// </summary>
    public string NameSpace
    {
    set { _namespace = value; }
    get { return _namespace; }
    }
    /// <summary>
    /// 实体类的命名空间
    /// </summary>
    public string Modelpath
    {
    set { _modelpath = value; }
    get { return _modelpath; }
    }
    /// <summary>
    /// model类名
    /// </summary>
    public string ModelName
    {
    set { _modelname = value; }
    get { return _modelname; }
    }
    /// <summary>
    /// 选择的字段集合
    /// </summary>
    public List<ColumnInfo> Fieldlist
    {
    set { _fieldlist = value; }
    get { return _fieldlist; }
    }

    #endregion

    public BuilderModel()
    {
    }

    #region 生成完整Model类
    /// <summary>
    /// 生成完整sModel类
    /// </summary>
    public string CreatModel()
    {
    StringPlus strclass
    = new StringPlus();
    strclass.AppendLine(
    "using System;");
    strclass.AppendLine(
    "using System.ComponentModel;");
    strclass.AppendLine(
    "namespace " + Modelpath);
    strclass.AppendLine(
    "{");
    strclass.AppendSpaceLine(
    1, "/// <summary>");
    strclass.AppendSpaceLine(
    1, "/// 实体类" + _modelname + " 。(属性说明自动提取数据库字段的描述信息)");
    strclass.AppendSpaceLine(
    1, "/// </summary>");
    strclass.AppendSpaceLine(
    1, "[Serializable]");
    strclass.AppendSpaceLine(
    1, "public class " + _modelname + " : INotifyPropertyChanged");
    strclass.AppendSpaceLine(
    1, "{");
    strclass.AppendSpaceLine(
    2, "#region 实现INotifyPropertyChanged");
    strclass.AppendSpaceLine(
    2, "public event PropertyChangedEventHandler PropertyChanged;");
    strclass.AppendSpaceLine(
    2, "public void NotifyPropertyChanged(string propertyName)");
    strclass.AppendSpaceLine(
    2, "{");
    strclass.AppendSpaceLine(
    3, "if (this.PropertyChanged != null)");
    strclass.AppendSpaceLine(
    3, "{");
    strclass.AppendSpaceLine(
    4, "this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));");
    strclass.AppendSpaceLine(
    3, "}");
    strclass.AppendSpaceLine(
    2, "}");
    strclass.AppendSpaceLine(
    2, "#endregion");
    strclass.AppendSpaceLine(
    2, "public " + _modelname + "()");
    strclass.AppendSpaceLine(
    2, "{}");
    strclass.AppendLine(CreatModelMethod());
    strclass.AppendSpaceLine(
    1, "}");
    strclass.AppendLine(
    "}");
    strclass.AppendLine(
    "");

    return strclass.ToString();
    }
    #endregion

    #region 生成Model属性部分
    /// <summary>
    /// 生成实体类的属性
    /// </summary>
    /// <returns></returns>
    public string CreatModelMethod()
    {

    StringPlus strclass
    = new StringPlus();
    StringPlus strclass1
    = new StringPlus();
    StringPlus strclass2
    = new StringPlus();
    strclass.AppendSpaceLine(
    2, "#region Model");
    foreach (ColumnInfo field in Fieldlist)
    {
    string columnName = field.ColumnName;
    string fieldName=" _" + columnName.ToLower();
    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
    = "?";//代表可空类型
    }
    }
    strclass1.AppendSpaceLine(
    2, "private " + columnType + isnull + fieldName + ";");//私有变量
    strclass2.AppendSpaceLine(2, "/// <summary>");
    strclass2.AppendSpaceLine(
    2, "/// " + deText);
    strclass2.AppendSpaceLine(
    2, "/// </summary>");
    strclass2.AppendSpaceLine(
    2, "public " + columnType + isnull + " " + columnName);//属性
    strclass2.AppendSpaceLine(2, "{");
    strclass2.AppendSpaceLine(
    3, "get{return " + fieldName + ";}");

    strclass2.AppendSpaceLine(
    3, "set");
    strclass2.AppendSpaceLine(
    3, "{");
    strclass2.AppendSpaceLine(
    4, "if("+fieldName+"!=value)");
    strclass2.AppendSpaceLine(
    4, "{");
    strclass2.AppendSpaceLine(
    5, fieldName+"=value;");
    strclass2.AppendSpaceLine(
    5, "NotifyPropertyChanged(\""+columnName+"\");");
    strclass2.AppendSpaceLine(
    4, "}");
    strclass2.AppendSpaceLine(
    3, "}");

    strclass2.AppendSpaceLine(
    2, "}");
    }
    strclass.Append(strclass1.Value);
    strclass.Append(strclass2.Value);
    strclass.AppendSpaceLine(
    2, "#endregion Model");

    return strclass.ToString();
    }

    #endregion
    }
  • 相关阅读:
    use paramiko to connect remote server and execute command
    protect golang source code
    adjust jedi vim to python2 and python3
    install vim plugin local file offline
    add swap file if you only have 1G RAM
    datatables hyperlink in td
    django rest framework custom json format
    【JAVA基础】网络编程
    【JAVA基础】多线程
    【JAVA基础】String类的概述和使用
  • 原文地址:https://www.cnblogs.com/zhlei616/p/1740001.html
Copyright © 2011-2022 走看看