此模版需要执行2次
第1次执行产生.cs文件,然后报“此文件被进程占用”的提示,算是一个Bug吧,还在改进
第2次执行产生get()和set()
<% @ CodeTemplate Language = " C# " TargetLanguage = " C# " Inherits = " OutputFileCodeTemplate " Description = " Template description here. " %> <% @ Assembly Name = " SchemaExplorer " %> <% @ Assembly Name = " System.Design " %> <% @ Assembly Name = " CodeSmith.BaseTemplates " %> <% @ Assembly Name = " CodeSmith.CustomProperties " %> <% @ Import Namespace = " CodeSmith.BaseTemplates " %> <% @ Import Namespace = " CodeSmith.CustomProperties " %> <% @ Import Namespace = " SchemaExplorer " %> <% @ Import Namespace = " System.IO " %> <% @ Import Namespace = " System.Text.RegularExpressions " %> <% @ Import Namespace = " CodeSmith.CustomProperties " %> <% @ Property Name = " SourceData " Type = " SchemaExplorer.DatabaseSchema " Optional = " False " Category = " Context " Description = "" %> <% @ Property Name = " Output " Type = " System.String " Default = " D:/MyModel " Optional = " False " Category = " Context " Description = "" %> <% Render(); %> < script runat = " template " > // Table List public TableSchemaCollection GetTableCollection(DatabaseSchema dataBase) ... { TableSchemaCollection tables = new TableSchemaCollection(dataBase.Tables); return tables;} // Column Type public string GetType(ColumnSchema column) ... { if (column.Name.EndsWith("TypeCode")) return column.Name; switch (column.DataType) ...{ case DbType.AnsiString: return "string"; case DbType.AnsiStringFixedLength: return "string"; case DbType.Binary: return "byte[]"; case DbType.Boolean: return "bool"; case DbType.Byte: return "int"; case DbType.Currency: return "decimal"; case DbType.Date: return "DateTime"; case DbType.DateTime: return "DateTime"; case DbType.Decimal: return "decimal"; case DbType.Double: return "double"; case DbType.Guid: return "Guid"; case DbType.Int16: return "short"; case DbType.Int32: return "int"; case DbType.Int64: return "long"; case DbType.Object: return "object"; case DbType.SByte: return "sbyte"; case DbType.Single: return "float"; case DbType.String: return "string"; case DbType.StringFixedLength: return "string"; case DbType.Time: return "TimeSpan"; case DbType.UInt16: return "ushort"; case DbType.UInt32: return "uint"; case DbType.UInt64: return "ulong"; case DbType.VarNumeric: return "decimal"; default: ...{ return "__UNKNOWN__" + column.NativeType; } }} // Go public void Render() ... { TableSchemaCollection tables = GetTableCollection(SourceData); foreach(TableSchema dt in tables) ...{ if(Directory.Exists(Output) == false) ...{ Directory.CreateDirectory(Output); } string strFileName = Output + "/" + dt.Name.ToString().Replace("dbo.","") + ".cs"; if(File.Exists(strFileName) == false) ...{ File.Create(strFileName); } } foreach(TableSchema dt in tables) ...{ string strFileName = Output + "/" + dt.Name.ToString().Replace("dbo.","") + ".cs"; FileStream fs = new FileStream(strFileName,FileMode.Create,FileAccess.Write); StreamWriter sw = new StreamWriter(fs, System.Text.Encoding.UTF8); sw.WriteLine("using System;"); sw.WriteLine("using System.Collections.Generic;"); sw.WriteLine("using System.Text;"); sw.WriteLine("using System;"); sw.WriteLine("using System.Data;"); sw.WriteLine(""); sw.WriteLine("#region ==== " + dt.Name.ToString().Replace("dbo.","") + " ===="); sw.WriteLine("public class " + dt.Name.ToString().Replace("dbo.","")); sw.WriteLine("{"); sw.WriteLine(" public " + dt.Name.ToString().Replace("dbo.","")); sw.WriteLine(" {}"); sw.WriteLine(" #region ==== Variable ===="); foreach(ColumnSchema cs in dt.Columns) ...{ sw.WriteLine(" //" + cs.Description); sw.WriteLine(" private " + GetType(cs)+ " " + cs.Name.ToLower() + ";"); } sw.WriteLine(" #endregion"); foreach(ColumnSchema cs in dt.Columns) ...{ sw.WriteLine(" ///<summary>"); sw.WriteLine(" ///" + cs.Description); sw.WriteLine(" ///</summary>"); sw.WriteLine(" public " + GetType(cs) + " " + cs.Name.ToString()); sw.WriteLine(" {"); sw.WriteLine(" get"); sw.WriteLine(" {"); sw.WriteLine(" return " + cs.Name.ToString().ToLower() + ";"); sw.WriteLine(" }"); sw.WriteLine(" set"); sw.WriteLine(" {"); sw.WriteLine(" " + cs.Name.ToString().ToLower() + " = value;"); sw.WriteLine(" }"); sw.WriteLine(" }"); } sw.WriteLine("}"); sw.WriteLine("#endregion"); sw.Close(); }} </ script >