• codesmith 自动生成C# model 实体模板


    <%-- 
    Name:自动生成
    Author: 陈胜威
    Description: 直接生成model类
    --%>
    <%@ Template Language="C#" TargetLanguage="cs" %>  
    <%@ Property Name="SourceTable" Type="SchemaExplorer.TableSchema" Default="" Optional="True" Category="Tables" Description="This is a sample string property." %>  
    <%@ Property Name="ProjectName" Type="System.string" Default="Blog" Optional="False" Category="Strings" Description="This is Project Name" %>  
    <%@ Assembly Name="SchemaExplorer" %>  
    <%@ Import Namespace="SchemaExplorer" %>  
    <%@ Assembly Name="SchemaExplorer" %>  
    <%@ Assembly Name="System.Data" %>  
    <%@ Import Namespace="SchemaExplorer" %>  
    <%@ Import Namespace="System.Data" %>  
    <%@ Map Name="SqlCSharp" Src="Sql-CSharp" Description="System to C# Type Map" %>  
    <%@ Map Name="DbDataReader" Src="DbType-DataReaderMethod" Description="DbType to DataReader Method Map" %>  
    <%@ Map Name="SqlNativeSqlDb" Src="SqlNativeType-SqlDbType" Description="SqlNativeType to SqlDbType Map" %>  
    <%@ Map Name="DbTypeCSharp" Src="DbType-CSharp" Description="DbType to CSharp Map" %>  
      
      
    using System;  
      
    namespace <%= ProjectName%>.Model  
    {  
        public class <%= GetClassName(SourceTable) %>  
        {  
             <%  
                  foreach(var column in SourceTable.Columns)  
                  {  
         %>  
           
             <%=GetMemberVariableDeclarationStatement(column)%>  
           
         <%    
                  }  
            %>  
            public <%= GetClassName(SourceTable) %>(<%=GetConStructorParameters(SourceTable) %>)  
            {  
            <%  
                  foreach(ColumnSchema column in SourceTable.Columns)  
                  {  
             %>  
             <%= GetMemberVariableName(column) %>=<%= GetMemberVariableName(column).Substring(1) %>;  
               
             <%  
                  }  
            %>  
            }  
              
            <%  
                    
            foreach(ColumnSchema column in SourceTable.Columns)  
            {  
             %>  
               
             public <%=GetCSharpVariableType(column) %> <%=GetPascalMemberVariableName(column) %>  
             {  
                get  
                {  
                  
                 return <%=GetMemberVariableName(column) %>;  
                  
                }  
                set  
                {  
                  
                  <%=GetMemberVariableName(column) %>=value;  
                 
                }  
               
             }  
               
             <%  
            }  
            %>  
        }  
    }  
        
    <script runat="template">  
    public string GetConStructorParameters(TableSchema table)  
    {  
        string returnParameters="";  
        foreach(ColumnSchema column in table.Columns)  
        {  
           returnParameters+=GetCSharpVariableType(column)+" "+GetMemberVariableName(column).Substring(1)+",";  
        }  
        return returnParameters.Substring(0,returnParameters.Length-1);  
    }  
          
    public string GetMemberVariableDeclarationStatement(ColumnSchema column)  
    {  
        return GetMemberVariableDeclarationStatement("private", column);  
    }  
      
    public string GetMemberVariableDeclarationStatement(string protectionLevel, ColumnSchema column)  
    {  
        string statement = protectionLevel + " ";  
        statement += GetCSharpVariableType(column) + " " + GetMemberVariableName(column);  
          
        string defaultValue = GetMemberVariableDefaultValue(column);  
        if (defaultValue != "")  
        {  
            statement += " = " + defaultValue;  
        }  
          
        statement += ";";  
          
        return statement;  
    }  
      
    public string GetReaderAssignmentStatement(ColumnSchema column, int index)  
    {  
        string statement = "if (!reader.IsDBNull(" + index.ToString() + ")) ";  
        statement += GetMemberVariableName(column) + " = ";  
          
        if (column.Name.EndsWith("TypeCode")) statement += "(" + column.Name + ")";  
          
        statement += "reader." + GetReaderMethod(column) + "(" + index.ToString() + ");";  
          
        return statement;  
    }  
      
    public string GetCamelCaseName(string value)  
    {  
        return value.Substring(0, 1).ToLower() + value.Substring(1);  
    }  
      
    public string GetMemberVariableName(ColumnSchema column)  
    {  
        string propertyName = GetPropertyName(column);  
        string memberVariableName = "_" + GetCamelCaseName(propertyName);  
          
        return memberVariableName;  
    }  
      
    public string GetPascalMemberVariableName(ColumnSchema column)  
    {  
        string propertyName = GetPropertyName(column);  
        string memberVariableName = "_" + GetCamelCaseName(propertyName);  
          
        string temp= propertyName.Substring(0,1).ToUpper()+propertyName.Substring(1);  
        return temp;  
    }  
          
    public string GetPropertyName(ColumnSchema column)  
    {  
        string propertyName = column.Name;  
          
        if (propertyName == column.Table.Name + "Name") return "Name";  
        if (propertyName == column.Table.Name + "Description") return "Description";  
          
        if (propertyName.EndsWith("TypeCode")) propertyName = propertyName.Substring(0, propertyName.Length - 4);  
          
        return propertyName;  
    }  
              
    public string GetMemberVariableDefaultValue(ColumnSchema column)  
    {  
        switch (column.DataType)  
        {  
            case DbType.Guid:  
            {  
                return "Guid.Empty";  
            }  
            case DbType.AnsiString:  
            case DbType.AnsiStringFixedLength:  
            case DbType.String:  
            case DbType.StringFixedLength:  
            {  
                return "String.Empty";  
            }  
            default:  
            {  
                return "";  
            }  
        }  
    }  
      
    public string GetCSharpVariableType(ColumnSchema column)  
    {  
        if (column.Name.EndsWith("TypeCode")) return column.Name;  
      
        return DbTypeCSharp[column.DataType.ToString()];      
    }  
      
    public string GetReaderMethod(ColumnSchema column)  
    {  
        return DbDataReader[column.DataType.ToString()];  
    }  
      
    public string GetClassName(TableSchema table)  
    {  
        if (table.Name.EndsWith("s"))  
        {  
            return table.Name.Substring(0, table.Name.Length - 1);  
        }  
        else  
        {  
            return table.Name;  
        }  
    }  
      
    public string GetSqlDbType(ColumnSchema column)  
    {  
        return SqlNativeSqlDb[column.NativeType.ToString()];  
    }  
      
    public string GetPrimaryKeyType(TableSchema table)  
    {  
        if (table.PrimaryKey != null)  
        {  
            if (table.PrimaryKey.MemberColumns.Count == 1)  
            {  
                return GetCSharpVariableType(table.PrimaryKey.MemberColumns[0]);  
            }  
            else  
            {  
                throw new ApplicationException("This template will not work on primary keys with more than one member column.");  
            }  
        }  
        else  
        {  
            throw new ApplicationException("This template will only work on tables with a primary key.");  
        }  
    }  
      
    public override string GetFileName()  
    {  
        return this.GetClassName(this.SourceTable) + ".cs";  
    }  
    </script>
  • 相关阅读:
    python字符串相关的函数
    令人惊奇的gdb和pstack
    map的正确删除方式
    论道
    自动锁
    delete数组引发的core分析
    linux_硬链接和软链接区别
    vmware的卸载
    vmware + opensuse windows如何远程登录到suse上
    [置顶]援引个人新浪博客
  • 原文地址:https://www.cnblogs.com/dearbeans/p/7704818.html
走看看 - 开发者的网上家园