CodeSmith 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>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值