CodeSmith学习笔记

本文来自:http://blog.okbase.net/haobao/archive/32.html

 

表格名称

<%@ Property Name="SourceTable" Type="SchemaExplorer.TableSchema" Category="1. Context" Description="Table that the documentation should be based on." %>

<%=SourceTable%>

 

不含dbowner的表格名称

<%=SourceTable.Name%>

 

将表中所有列名作为参数

void myfunction(<% for (int i = 0; i < SourceTable.Columns.Count; i++) { %><%=CSharpAlias[SourceTable.Columns[i].SystemType.FullName]%> <%=SourceTable.Columns[i].Name%><% if (i < SourceTable.Columns.Count-1) { %>, <% } %><% } %>)

 

主键列名

SourceTable.PrimaryKey.MemberColumns[0].Name

 

主键的SQL数据类型

SourceTable.PrimaryKey.MemberColumns[0].NativeType

 

列名

SourceTable.Columns[i].Name

 

列的数据长度

SourceTable.Columns[i].Size

 

列的系统数据类型

SourceTable.Columns[i].SystemType.FullName

 

Sql本地数据类型转换到SqlDbType类型

<%@ Map Name="SqlNativeSqlDb" Src="SqlNativeType-SqlDbType" Description="SqlNativeType to SqlDbType Map" %>

public string GetSqlDbType(ColumnSchema column)

{

return SqlNativeSqlDb[column.NativeType.ToString()];

}

 

自己写的方法:

GetSqlDbType(SourceTable.Columns[i])

public string GetSqlDbType(ColumnSchema column)

switch (column.NativeType.ToLower()) 

case "bigint": return "SqlDbType.BigInt"; 

case "binary": return "SqlDbType.Binary"; 

case "bit": return "SqlDbType.Bit"; 

case "char": return "SqlDbType.Char"; 

case "datetime": return "SqlDbType.DateTime"; 

case "decimal": return "SqlDbType.Decimal"; 

case "float": return "SqlDbType.Float"; 

case "image": return "SqlDbType.Image"; 

case "int": return "SqlDbType.Int"; 

case "money": return "SqlDbType.Money"; 

case "nchar": return "SqlDbType.NChar"; 

case "ntext": return "SqlDbType.NText"; 

case "numeric": return "SqlDbType.Decimal"; 

case "nvarchar": return "SqlDbType.NVarChar"; 

case "real": return "SqlDbType.Real"; 

case "smalldatetime": return "SqlDbType.SmallDateTime"; 

case "smallint": return "SqlDbType.SmallInt"; 

case "smallmoney": return "SqlDbType.SmallMoney"; 

case "sql_variant": return "SqlDbType.Variant"; 

case "sysname": return "SqlDbType.NChar"; 

case "text": return "SqlDbType.Text"; 

case "timestamp": return "SqlDbType.Timestamp"; 

case "tinyint": return "SqlDbType.TinyInt"; 

case "uniqueidentifier": return "SqlDbType.UniqueIdentifier"; 

case "varbinary": return "SqlDbType.VarBinary"; 

case "varchar": return "SqlDbType.VarChar"; 

default: return "__UNKNOWN__" + column.NativeType; 

}

 

系统数据类型转换为C#数据类型

<%@ Map Name="CSharpAlias" Src="System-CSharpAlias" Description="System to C# Type Map" %>

CSharpAlias[SourceTable.Columns[i].SystemType.FullName]

 

SQL Server数据类型转换到C#数据类型

<%@ Map Name="SqlCSharp" Src="Sql-CSharp" Description="SQL Server data type to C# data type map" %>

public string GetCSharpType(ColumnSchema column)

{

return SqlCSharp[column.NativeType.ToString()];

}

 

判断是否为自增长列

if( ((bool)SourceTable.Columns[i].ExtendedProperties["CS_IsIdentity"].Value) == true)

{

Response.Write(SourceTable.Columns[i].Name);

}

 

让codesmith支持中文

1)Tools->Options...->Studio->Editor->Enable unicode support将这个选项勾上。

2)在模板文件的CodeTemplate声明中加上ResponseEncoding="UTF-8 "属性:

<%@ CodeTemplate ResponseEncoding="UTF-8" TargetLanguage="Text" Src="" Inherits="" Debug="False" CompilerVersion="v3.5" Description="Template description here." %>

 

 

其它参考信息:

 

/r/n   /r是换行 /n是回车换行

SchemaExplorer.TableSchema类:是CodeSmith中自带的一个类,它描述表的结构。

Name属性:表的名称

Columns属性:表中列的集合

ExtendedProperties属性:表中指定列的扩展信息 

ForeignKeyColumns属性:表的一个外键列的集合

ForeignKeys属性:表的外键集合

HasPrimaryKey属性:返回表中是否存在主键

NonForeignKeyColumns属性:表中非外键列的集合

NonKeyColumns属性:表中非外键,非主键列的集合

NonPrimaryKeyColumns属性:表中非主键列的集合

PrimaryKey属性:表中的主键

 

表中指定列的扩展属性 (ExtendedProperties属性):

  CS_IsIdentity:自增长列

  CS_IsComputed :计算列

  CS_IdentitySeed :自增长列的起始值

  CS_IdentityIncrement :自增长列的步长

  CS_Default :列的默认值

posted on 2013-01-20 11:10  静以修身俭以养德  阅读(236)  评论(0编辑  收藏  举报

导航