解决CodeSmith不能读取MySql数据库字段说明的问题

打开项目:

C:\Program Files\CodeSmith\v5.2\Samples\Samples\Projects\CSharp\MySQLSchemaProvider

将MySQLSchemaProvider.cs中的GetExtendedProperties修改为:

 

  1           ///   <summary>
  2           ///  Gets the extended properties for a given schema object.
  3           ///   </summary>
  4           ///   <param name="connectionString"> The connection string used to connect to the target database. </param>
  5           ///   <param name="schemaObject"></param>
  6           ///   <returns></returns>
  7           public  ExtendedProperty[] GetExtendedProperties( string  connectionString, SchemaObjectBase schemaObject)
  8          {
  9              List < ExtendedProperty >  extendedProperties  =   new  List < ExtendedProperty > ();
 10 
 11               if  (schemaObject  is  ColumnSchema)
 12              {
 13                  ColumnSchema columnSchema  =  schemaObject  as  ColumnSchema;
 14 
 15                   string  commandText  =   string .Format( @" SELECT EXTRA, COLUMN_DEFAULT, COLUMN_TYPE, COLUMN_COMMENT
 16  FROM INFORMATION_SCHEMA.COLUMNS
 17  WHERE TABLE_SCHEMA = '{0}'
 18    AND TABLE_NAME = '{1}'
 19    AND COLUMN_NAME = '{2}' " , columnSchema.Table.Database.Name, columnSchema.Table.Name, columnSchema.Name);
 20 
 21                   using  (DbConnection connection  =  CreateConnection(connectionString))
 22                  {
 23                      connection.Open();
 24 
 25                      DbCommand command  =  connection.CreateCommand();
 26                      command.CommandText  =  commandText;
 27                      command.Connection  =  connection;
 28 
 29                       using  (IDataReader reader  =  command.ExecuteReader(CommandBehavior.CloseConnection))
 30                      {
 31                           while  (reader.Read())
 32                          {
 33                               string  extra  =  reader.GetString( 0 ).ToLower();
 34                               bool  columndefaultisnull  =  reader.IsDBNull( 1 );
 35                               string  columndefault  =   "" ;
 36                               if  ( ! columndefaultisnull)
 37                              {
 38                                  columndefault  =  reader.GetString( 1 ).ToUpper();
 39                              }
 40                               string  columntype  =  reader.GetString( 2 ).ToUpper();
 41                               string  columncomment  =  reader.GetString( 3 );
 42 
 43                               bool  isIdentity  =  (extra.IndexOf( " auto_increment " >   - 1 );
 44                              extendedProperties.Add( new  ExtendedProperty( " CS_IsIdentity " , isIdentity, columnSchema.DataType));
 45 
 46                               if  (isIdentity)
 47                              {
 48                                   /*
 49                                  MySQL auto_increment doesn't work exactly like SQL Server's IDENTITY
 50                                  I believe that auto_increment is equivalent to IDENTITY(1, 1)
 51                                  However, auto_increment behaves differently from IDENTITY when used
 52                                  with multi-column primary keys.  See the MySQL Reference Manual for details.
 53                                   */
 54                                  extendedProperties.Add( new  ExtendedProperty( " CS_IdentitySeed " 1 , columnSchema.DataType));
 55                                  extendedProperties.Add( new  ExtendedProperty( " CS_IdentityIncrement " 1 , columnSchema.DataType));
 56                              }
 57 
 58                              extendedProperties.Add( new  ExtendedProperty( " CS_ColumnDefaultIsNull " , columndefaultisnull, DbType.Boolean));
 59                              extendedProperties.Add( new  ExtendedProperty( " CS_ColumnDefault " , columndefault, DbType.String));
 60                              extendedProperties.Add( new  ExtendedProperty( " CS_ColumnType " , columntype, DbType.String));
 61                              extendedProperties.Add( new  ExtendedProperty( " CS_ColumnExtra " , extra.ToUpper(), DbType.String));
 62                              extendedProperties.Add( new  ExtendedProperty( " CS_Description " , columncomment, DbType.String));
 63                          }
 64 
 65                           if  ( ! reader.IsClosed)
 66                              reader.Close();
 67                      }
 68 
 69                       if  (connection.State  !=  ConnectionState.Closed)
 70                          connection.Close();
 71                  }
 72              }
 73               if  (schemaObject  is  TableSchema)
 74              {
 75                  TableSchema tableSchema  =  schemaObject  as  TableSchema;
 76                   string  commandText  =   string .Format( @" SHOW CREATE TABLE `{0}`.`{1}` " , tableSchema.Database.Name, tableSchema.Name);
 77 
 78                   using  (DbConnection connection  =  CreateConnection(connectionString))
 79                  {
 80                      connection.Open();
 81 
 82                      DbCommand command  =  connection.CreateCommand();
 83                      command.CommandText  =  commandText;
 84                      command.Connection  =  connection;
 85 
 86                       using  (IDataReader reader  =  command.ExecuteReader(CommandBehavior.CloseConnection))
 87                      {
 88                           while  (reader.Read())
 89                          {
 90                               string  createtable  =  reader.GetString( 1 );
 91                              extendedProperties.Add( new  ExtendedProperty( " CS_CreateTableScript " , createtable, DbType.String));
 92                          }
 93 
 94                           if  ( ! reader.IsClosed)
 95                              reader.Close();
 96                      }
 97 
 98                       if  (connection.State  !=  ConnectionState.Closed)
 99                          connection.Close();
100                  }
101              }
102 
103               return  extendedProperties.ToArray();
104          }

 

 

然后将生成的dSchemaExplorer.MySQLSchemaProvider.dll文件放入C:\Program Files\CodeSmith\v5.2\SchemaProviders

 

示例模板:

 1  <%--  
 2  Name: CSharp Model
 3  Author: ahui
 4  Description: C# Model Class 
 5  Date:  2010 - 12 - 16
 6  --%>
 7  <% @ CodeTemplate Language = " C# "  ResponseEncoding = " UTF-8 "  TargetLanguage = " Text "  Src = ""  Inherits = ""  Debug = " False "  CompilerVersion = " v3.5 "  Description = " Template description here. "   %>
 8  <% @ Assembly Name = " SchemaExplorer "   %>
 9  <% @ Import Namespace = " SchemaExplorer "   %>
10  <% @ Property Name = " SourceTable "  Type = " SchemaExplorer.TableSchema "  Category = " DataTable "  Description = " 数据表 "   %>
11  <% @ Property Name = " NameSpacce "  Type = " System.String "  Category = " Context "  Default = " PubDS.Model "  Description = " 命名空间 "   %>
12  <% @ Property Name = " Author "  Type = " System.String "  Category = " Context "  Default = " ahui "  Description = " 作者 "   %>
13  <% @ Property Name = " Description "  Type = " String "  Category = " Context "  Description = " 类说明 "  Optional = " true " %>
14 
15  < script runat = " template " >
16 
17  public   string  GetSystemType(ColumnSchema col)
18  {
19       string  typeName  =  col.SystemType.Name;
20       if  (col.AllowDBNull  &&  col.SystemType.IsValueType)
21      {
22          typeName  +=   " ? " ;
23      }
24       return  typeName;
25  }
26 
27  </ script >
28  using  System;
29  using  System.Collections.Generic;
30  using  System.Text;
31 
32  namespace   <%=  NameSpacce  %>
33  {
34       ///   <summary>
35       ///   <%= Description %>
36       ///   </summary>
37       public   class   <%=  StringUtil.ToPascalCase(SourceTable.Name)  %>
38      {
39           #region  构造函数
40           public   <%=  StringUtil.ToPascalCase(SourceTable.Name)  %> ()
41          {
42          }
43           #endregion
44          
45           #region  表字段
46  <%   foreach  (ColumnSchema col  in  SourceTable.Columns) {  %>
47           ///   <summary>
48           ///   <%= col.Description %>
49           ///   </summary>
50           public   <%=  GetSystemType(col)  %>   <%=  StringUtil.ToPascalCase(col.Name)  %>
51          {
52               get ;
53               set ;
54          }
55          
56  <%  }  %>
57           #endregion
58      }
59  }

 

 

你可能感兴趣的:(mysql)