本文来自: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 :列的默认值