使用CodeSmith生成oracle数据库表的实体层(Model) ——来自 dacong

来源:互联网 发布:数据库审计产品价格 编辑:程序博客网 时间:2024/04/29 23:12

自己写的,CodeSimth中的例子都是msSQL server的,所以自己写了个支持Oracle数据库表的,不一定很完善,适用就好,数据类型没有周全考虑,只考虑了常用的一些类型,增加了个表名字属性,采用的.net2.0我结构,没有使用3.0中的自动属性。

CodeSmith Professional 5.0.1.4983  

要求自己建立一个OracleSchemaPrivider,连接到你的oracle数据库,选择一个表【生成】

 

view plain
  1. <%@ CodeTemplate Language="C#" TargetLanguage="C#" Description="Generates a very simple business object." ResponseEncoding="UTF-8" %>  
  2. <%@ Property Name="DevelopersName" Type="String" Category="Context" Default="dacong" Description="作者" %>  
  3. <%@ Property Name="Suffix" Type="String" Category="Context" Default="Info" Description="类名后辍" %>  
  4.   
  5. <%@ Property Name="NameSpace" Type="String" Category="Context" Default="dacong" Description="The namespace to use for this class,不包括Model" %>  
  6. <%@ Property Name="SourceTable" Type="SchemaExplorer.TableSchema" Category="Context" Description="Table that the object is based on." %>  
  7. <%@ Assembly Name="SchemaExplorer" %>  
  8. <%@ Assembly Name="System.Data" %>  
  9. <%@ Import Namespace="SchemaExplorer" %>  
  10. <%@ Import Namespace="System.Data" %>  
  11. /****************************************************************************** 
  12.  ---------------------------------------------------------------- 
  13.   模块名称: <%= GetClassName(SourceTable) %>[模型] 
  14.   编者    : <%=DevelopersName %>        创建日期: <%=DateTime.Now.Date.ToString("yyyy年MM月dd日")%> 
  15.   功能描述:  
  16.  ---------------------------------------------------------------- 
  17.   修改日期:      修改人:  
  18.   修改内容:  
  19.  ---------------------------------------------------------------- 
  20. ******************************************************************************/  
  21. using System;  
  22. using System.Xml.Serialization;  
  23.   
  24. namespace <%= NameSpace %>.Model  
  25. {  
  26.  /// <summary>  
  27.  /// <para><%= GetClassName(SourceTable) %> Object</para>  
  28.  /// <para>Summary description for <%= GetClassName(SourceTable) %>.</para>  
  29.  /// <para><see cref="member"/></para>  
  30.  /// <remarks></remarks>  
  31.  /// </summary>  
  32.  [Serializable]  
  33.  public class <%= GetClassName(SourceTable) %><%= Suffix %>  
  34.  {   
  35.   #region Fields  
  36.   <% foreach (ColumnSchema column in SourceTable.Columns) { %>  
  37.   <%= GetMemberVariableDeclarationStatement(column) %>  
  38.   <% } %>    
  39.    
  40.   #endregion  
  41.  
  42.   #region Contructors  
  43.   public <%= GetClassName(SourceTable) %><%= Suffix %>()  
  44.   {  
  45.      
  46.   }  
  47.   #endregion  
  48.    
  49.   #region Public Properties  
  50.     
  51.   <% for (int i = 0; i < SourceTable.Columns.Count; i++) { %>  
  52.   public <%= GetCSharpVariableType(SourceTable.Columns[i]) %> <%= SourceTable.Columns[i].Name %>  
  53.   {  
  54.    get {return <%= GetMemberVariableName(SourceTable.Columns[i]) %>;}  
  55.    set   
  56.    {  
  57.     <%= GetMemberVariableName(SourceTable.Columns[i]) %> = value;  
  58.    }  
  59.   }  
  60.   <% if (i < SourceTable.Columns.Count - 1) Response.Write("/r/n"); %>    
  61.   <% } %>  
  62.     
  63.     
  64.   /// <summary>  
  65.         /// 数据库表名称  
  66.         /// </summary>  
  67.         public string TableName  
  68.         {  
  69.             get { return "<%= GetClassName(SourceTable) %>"; }  
  70.         }  
  71.    
  72.   #endregion  
  73.  }  
  74. }<mce:script runat="template"><!--  
  75. #region script  
  76. public string GetMemberVariableDeclarationStatement(ColumnSchema column)  
  77. {  
  78.  return GetMemberVariableDeclarationStatement("private", column);  
  79. }  
  80.   
  81. public string GetMemberVariableDeclarationStatement(string protectionLevel, ColumnSchema column)  
  82. {  
  83.  string statement = protectionLevel + " ";  
  84.  statement += GetCSharpVariableType(column) + " " + GetMemberVariableName(column);  
  85.    
  86.  string defaultValue = GetMemberVariableDefaultValue(column);  
  87.  if (defaultValue != "")  
  88.  {  
  89.   statement += " = " + defaultValue;  
  90.  }  
  91.    
  92.  statement += ";";  
  93.    
  94.  return statement;  
  95. }  
  96.   
  97. public string GetMemberVariableName(ColumnSchema column)  
  98. {  
  99.  //string propertyName = GetPropertyName(column);  
  100.  string propertyName = column.Name;  
  101.  //string memberVariableName = "_" + GetCamelCaseName(propertyName);  
  102.  string memberVariableName = "_" + LocalVariableFormat(propertyName);  
  103.  return memberVariableName;  
  104. }  
  105. public string GetCSharpVariableType(ColumnSchema column)  
  106.         {  
  107.             if (column.Name.EndsWith("TypeCode")) return column.Name;     
  108.             switch (column.DataType)  
  109.             {  
  110.                 case DbType.AnsiString: return "string";  
  111.                 case DbType.AnsiStringFixedLength: return "string";  
  112.                 case DbType.Binary: return "byte[]";  
  113.                 case DbType.Boolean: return "bool";  
  114.                 case DbType.Byte: return "byte";  
  115.                 case DbType.Currency: return "decimal";  
  116.                 case DbType.Date: return "DateTime";  
  117.                 case DbType.DateTime: return "DateTime";  
  118.                 case DbType.Decimal: return "decimal";  
  119.                 case DbType.Double: return "double";  
  120.                 case DbType.Guid: return "Guid";  
  121.                 case DbType.Int16: return "short";  
  122.                 case DbType.Int32: return "int";  
  123.                 case DbType.Int64: return "long";  
  124.                 case DbType.Object: return "object";  
  125.                 case DbType.SByte: return "sbyte";  
  126.                 case DbType.Single: return "float";  
  127.                 case DbType.String: return "string";  
  128.                 case DbType.StringFixedLength: return "string";  
  129.                 case DbType.Time: return "TimeSpan";  
  130.                 case DbType.UInt16: return "ushort";  
  131.                 case DbType.UInt32: return "uint";  
  132.                 case DbType.UInt64: return "ulong";  
  133.                 case DbType.VarNumeric:   
  134.     {  
  135.      if (column.Precision <=9)  
  136.      {  
  137.       if (column.Scale == 0)  
  138.        return "int";  
  139.       else  
  140.        return "long";  
  141.      }  
  142.      else  
  143.      {  
  144.       return "double";  
  145.      }  
  146.     }  
  147.                 default:  
  148.                     {  
  149.                         return "__UNKNOWN__" + column.NativeType;  
  150.                     }  
  151.             }  
  152.         }  
  153. public string GetMemberVariableDefaultValue(ColumnSchema column)  
  154.         {  
  155.             if (column.IsPrimaryKeyMember)  
  156.             {  
  157.                 return "";  
  158.             }  
  159.             switch (column.DataType)  
  160.             {  
  161.                 case DbType.Guid:  
  162.                     {  
  163.                         return "Guid.Empty";  
  164.                     }  
  165.                 case DbType.AnsiString:  
  166.                 case DbType.AnsiStringFixedLength:  
  167.                 case DbType.String:  
  168.                 case DbType.StringFixedLength:  
  169.                     {  
  170.                         return "String.Empty";  
  171.                     }  
  172.                 default:  
  173.                     {  
  174.                         return "";  
  175.                     }  
  176.             }  
  177.         }  
  178.   public string LocalVariableFormat(string value)  
  179.   {  
  180.    return value.ToLower();  
  181.   }  
  182.   public string GetClassName(TableSchema table)  
  183.         {  
  184.             /* 
  185.             if (table.Name.EndsWith("s")) 
  186.             { 
  187.                 return table.Name.Substring(0, table.Name.Length - 1); 
  188.             } 
  189.             else 
  190.             { 
  191.                 return table.Name; 
  192.             } 
  193.             */  
  194.             if (table == null)  
  195.             {  
  196.                 return null;  
  197.             }  
  198.             return table.Name;  
  199.         }  
  200. #endregion script  
  201. // --></mce:script>  

版本测试通过