问题描述:

  CodeSmith是现在比较实用的代码生成器,但是我们发现一个问题:

  使用CodeSmith编写MySQL模板的时候,会发现一个问题:MySQL数据表中的列说明获取不到,也就是column.Description。如图:

完美解决CodeSmith无法获取MySQL表及列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>
一个简单的CodeSmith生成Model实体的模板

相关文章:

  • 2021-06-02
  • 2022-12-23
  • 2021-11-08
  • 2021-11-14
  • 2022-12-23
  • 2021-06-02
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2021-12-26
  • 2021-07-09
  • 2021-12-23
  • 2021-09-16
  • 2022-12-23
相关资源
相似解决方案