问题描述:
CodeSmith是现在比较实用的代码生成器,但是我们发现一个问题:
使用CodeSmith编写MySQL模板的时候,会发现一个问题:MySQL数据表中的列说明获取不到,也就是column.Description。如图:
我们打开CodeSmith编写一个简单的Model实体类的示例模板如下:
1 <%-- 2 Name: MySQL Model实体模板 3 Author: 孤影[QQ:778078163] 4 Description: CodeSmith连接MySQL生成Model实体模板 5 --%> 6 7 <%@ Template Language="C#" TargetLanguage="C#" ResponseEncoding="UTF-8" %> 8 9 <%@ Assembly Name="SchemaExplorer" %> 10 <%@ Import Namespace="SchemaExplorer" %> 11 12 <%@ Property Name="SourceTable" Type="SchemaExplorer.TableSchema" Description="目标数据表" %> 13 <%@ Property Name="ModelNamespace" Type="System.String" Description="Model实体所在的命名空间" %> 14 15 using System; 16 using System.Collections.Generic; 17 using System.Linq; 18 using System.Text; 19 namespace <%=ModelNamespace %> 20 { 21 /// <summary> 22 /// <%=SourceTable.Description %> 23 /// </summary> 24 public class <%=SourceTable.Name %> 25 { 26 <% 27 // 循环遍历 获取当前数据表中的所有列 28 foreach(ColumnSchema column in SourceTable.Columns){ 29 Response.WriteLine(string.Format("// {0}",column.Description)); 30 Response.WriteLine(string.Format("public {0} {1} ;",GetCSharpVariableType(column),column.Name)); 31 } 32 %> 33 } 34 } 35 36 <script runat="template"> 37 // 获取指定列对应的C#数据类型 38 public string GetCSharpVariableType(ColumnSchema column) 39 { 40 if (column.Name.EndsWith("TypeCode")) return column.Name; 41 42 switch (column.DataType) 43 { 44 case DbType.AnsiString: return "string"; 45 case DbType.AnsiStringFixedLength: return "string"; 46 case DbType.Binary: return "byte[]"; 47 case DbType.Boolean: return "bool"; 48 case DbType.Byte: return "byte"; 49 case DbType.Currency: return "decimal"; 50 case DbType.Date: return "DateTime"; 51 case DbType.DateTime: return "DateTime"; 52 case DbType.Decimal: return "decimal"; 53 case DbType.Double: return "double"; 54 case DbType.Guid: return "Guid"; 55 case DbType.Int16: return "short"; 56 case DbType.Int32: return "int"; 57 case DbType.Int64: return "long"; 58 case DbType.Object: return "object"; 59 case DbType.SByte: return "sbyte"; 60 case DbType.Single: return "float"; 61 case DbType.String: return "string"; 62 case DbType.StringFixedLength: return "string"; 63 case DbType.Time: return "TimeSpan"; 64 case DbType.UInt16: return "ushort"; 65 case DbType.UInt32: return "uint"; 66 case DbType.UInt64: return "ulong"; 67 case DbType.VarNumeric: return "decimal"; 68 default: 69 { 70 return "__UNKNOWN__" + column.NativeType; 71 } 72 } 73 } 74 </script>