CodeSmith 学习知识点

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 :列的默认值

你可能感兴趣的:(CodeSmith 学习知识点)