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

来源:互联网 发布:vscode错误提示 编辑:程序博客网 时间:2024/03/29 17:11

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

http://blog.csdn.net/dacong/archive/2009/01/27/3853663.aspx

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

CodeSmith Professional 5.0.1.4983  

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

view plaincopy to clipboardprint?
<%@ CodeTemplate Language="C#" TargetLanguage="C#" Description="Generates a very simple business object." ResponseEncoding="UTF-8" %>  
<%@ Property Name="DevelopersName" Type="String" Category="Context" Default="dacong" Description="作者" %>  
<%@ Property Name="Suffix" Type="String" Category="Context" Default="Info" Description="类名后辍" %>  
 
<%@ Property Name="NameSpace" Type="String" Category="Context" Default="dacong" Description="The namespace to use for this class,不包括Model" %>  
<%@ Property Name="SourceTable" Type="SchemaExplorer.TableSchema" Category="Context" Description="Table that the object is based on." %>  
<%@ Assembly Name="SchemaExplorer" %>  
<%@ Assembly Name="System.Data" %>  
<%@ Import Namespace="SchemaExplorer" %>  
<%@ Import Namespace="System.Data" %>  
/****************************************************************************** 
 ---------------------------------------------------------------- 
  模块名称: <%= GetClassName(SourceTable) %>[模型] 
  编者    : <%=DevelopersName %>        创建日期: <%=DateTime.Now.Date.ToString("yyyy年MM月dd日")%> 
  功能描述:  
 ---------------------------------------------------------------- 
  修改日期:      修改人:  
  修改内容:  
 ---------------------------------------------------------------- 
******************************************************************************/ 
using System;  
using System.Xml.Serialization;  
 
namespace <%= NameSpace %>.Model  
{  
 /// <summary>  
 /// <para><%= GetClassName(SourceTable) %> Object</para>  
 /// <para>Summary description for <%= GetClassName(SourceTable) %>.</para>  
 /// <para><see cref="member"/></para>  
 /// <remarks></remarks>  
 /// </summary>  
 [Serializable]  
 public class <%= GetClassName(SourceTable) %><%= Suffix %>  
 {  
  #region Fields  
  <% foreach (ColumnSchema column in SourceTable.Columns) { %>  
  <%= GetMemberVariableDeclarationStatement(column) %>  
  <% } %>   
   
  #endregion 
 
  #region Contructors  
  public <%= GetClassName(SourceTable) %><%= Suffix %>()  
  {  
     
  } 
  #endregion 
   
  #region Public Properties  
    
  <% for (int i = 0; i < SourceTable.Columns.Count; i++) { %>  
  public <%= GetCSharpVariableType(SourceTable.Columns[i]) %> <%= SourceTable.Columns[i].Name %>  
  {  
   get {return <%= GetMemberVariableName(SourceTable.Columns[i]) %>;}  
   set   
   {  
    <%= GetMemberVariableName(SourceTable.Columns[i]) %> = value;  
   }  
  }  
  <% if (i < SourceTable.Columns.Count - 1) Response.Write("/r/n"); %>    
  <% } %>  
    
    
  /// <summary>  
        /// 数据库表名称  
        /// </summary>  
        public string TableName  
        {  
            get { return "<%= GetClassName(SourceTable) %>"; }  
        } 
   
  #endregion  
 }  
}<mce:script runat="template"><!-- 
#region script  
public string GetMemberVariableDeclarationStatement(ColumnSchema column)  
{  
 return GetMemberVariableDeclarationStatement("private", column);  
}  
 
public string GetMemberVariableDeclarationStatement(string protectionLevel, ColumnSchema column)  
{  
 string statement = protectionLevel + " ";  
 statement += GetCSharpVariableType(column) + " " + GetMemberVariableName(column);  
   
 string defaultValue = GetMemberVariableDefaultValue(column);  
 if (defaultValue != "")  
 {  
  statement += " = " + defaultValue;  
 }  
   
 statement += ";";  
   
 return statement;  
}  
 
public string GetMemberVariableName(ColumnSchema column)  
{  
 //string propertyName = GetPropertyName(column);  
 string propertyName = column.Name;  
 //string memberVariableName = "_" + GetCamelCaseName(propertyName);  
 string memberVariableName = "_" + LocalVariableFormat(propertyName);  
 return memberVariableName;  
}  
public string GetCSharpVariableType(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 "byte";  
                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:   
    {  
     if (column.Precision <=9)  
     {  
      if (column.Scale == 0)  
       return "int";  
      else 
       return "long";  
     }  
     else 
     {  
      return "double";  
     }  
    }  
                default:  
                    {  
                        return "__UNKNOWN__" + column.NativeType;  
                    }  
            }  
        }  
public string GetMemberVariableDefaultValue(ColumnSchema column)  
        {  
            if (column.IsPrimaryKeyMember)  
            {  
                return "";  
            }  
            switch (column.DataType)  
            {  
                case DbType.Guid:  
                    {  
                        return "Guid.Empty";  
                    }  
                case DbType.AnsiString:  
                case DbType.AnsiStringFixedLength:  
                case DbType.String:  
                case DbType.StringFixedLength:  
                    {  
                        return "String.Empty";  
                    }  
                default:  
                    {  
                        return "";  
                    }  
            }  
        }  
  public string LocalVariableFormat(string value)  
  {  
   return value.ToLower();  
  }  
  public string GetClassName(TableSchema table)  
        {  
            /* 
            if (table.Name.EndsWith("s")) 
            { 
                return table.Name.Substring(0, table.Name.Length - 1); 
            } 
            else 
            { 
                return table.Name; 
            } 
            */ 
            if (table == null)  
            {  
                return null;  
            }  
            return table.Name;  
        } 
#endregion script  
// --></mce:script> 
<%@ CodeTemplate Language="C#" TargetLanguage="C#" Description="Generates a very simple business object." ResponseEncoding="UTF-8" %>
<%@ Property Name="DevelopersName" Type="String" Category="Context" Default="dacong" Description="作者" %>
<%@ Property Name="Suffix" Type="String" Category="Context" Default="Info" Description="类名后辍" %>

<%@ Property Name="NameSpace" Type="String" Category="Context" Default="dacong" Description="The namespace to use for this class,不包括Model" %>
<%@ Property Name="SourceTable" Type="SchemaExplorer.TableSchema" Category="Context" Description="Table that the object is based on." %>
<%@ Assembly Name="SchemaExplorer" %>
<%@ Assembly Name="System.Data" %>
<%@ Import Namespace="SchemaExplorer" %>
<%@ Import Namespace="System.Data" %>
/******************************************************************************
 ----------------------------------------------------------------
  模块名称: <%= GetClassName(SourceTable) %>[模型]
  编者    : <%=DevelopersName %>        创建日期: <%=DateTime.Now.Date.ToString("yyyy年MM月dd日")%>
  功能描述:
 ----------------------------------------------------------------
  修改日期:      修改人:
  修改内容:
 ----------------------------------------------------------------
******************************************************************************/
using System;
using System.Xml.Serialization;

namespace <%= NameSpace %>.Model
{
 /// <summary>
 /// <para><%= GetClassName(SourceTable) %> Object</para>
 /// <para>Summary description for <%= GetClassName(SourceTable) %>.</para>
 /// <para><see cref="member"/></para>
 /// <remarks></remarks>
 /// </summary>
 [Serializable]
 public class <%= GetClassName(SourceTable) %><%= Suffix %>
 {
  #region Fields
  <% foreach (ColumnSchema column in SourceTable.Columns) { %>
  <%= GetMemberVariableDeclarationStatement(column) %>
  <% } %> 
 
  #endregion

  #region Contructors
  public <%= GetClassName(SourceTable) %><%= Suffix %>()
  {
  
  }
  #endregion
 
  #region Public Properties
 
  <% for (int i = 0; i < SourceTable.Columns.Count; i++) { %>
  public <%= GetCSharpVariableType(SourceTable.Columns[i]) %> <%= SourceTable.Columns[i].Name %>
  {
   get {return <%= GetMemberVariableName(SourceTable.Columns[i]) %>;}
   set
   {
    <%= GetMemberVariableName(SourceTable.Columns[i]) %> = value;
   }
  }
  <% if (i < SourceTable.Columns.Count - 1) Response.Write("/r/n"); %> 
  <% } %>
 
 
  /// <summary>
        /// 数据库表名称
        /// </summary>
        public string TableName
        {
            get { return "<%= GetClassName(SourceTable) %>"; }
        }
 
  #endregion
 }
}<mce:script runat="template"><!--
#region script
public string GetMemberVariableDeclarationStatement(ColumnSchema column)
{
 return GetMemberVariableDeclarationStatement("private", column);
}

public string GetMemberVariableDeclarationStatement(string protectionLevel, ColumnSchema column)
{
 string statement = protectionLevel + " ";
 statement += GetCSharpVariableType(column) + " " + GetMemberVariableName(column);
 
 string defaultValue = GetMemberVariableDefaultValue(column);
 if (defaultValue != "")
 {
  statement += " = " + defaultValue;
 }
 
 statement += ";";
 
 return statement;
}

public string GetMemberVariableName(ColumnSchema column)
{
 //string propertyName = GetPropertyName(column);
 string propertyName = column.Name;
 //string memberVariableName = "_" + GetCamelCaseName(propertyName);
 string memberVariableName = "_" + LocalVariableFormat(propertyName);
 return memberVariableName;
}
public string GetCSharpVariableType(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 "byte";
                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:
    {
     if (column.Precision <=9)
     {
      if (column.Scale == 0)
       return "int";
      else
       return "long";
     }
     else
     {
      return "double";
     }
    }
                default:
                    {
                        return "__UNKNOWN__" + column.NativeType;
                    }
            }
        }
public string GetMemberVariableDefaultValue(ColumnSchema column)
        {
            if (column.IsPrimaryKeyMember)
            {
                return "";
            }
            switch (column.DataType)
            {
                case DbType.Guid:
                    {
                        return "Guid.Empty";
                    }
                case DbType.AnsiString:
                case DbType.AnsiStringFixedLength:
                case DbType.String:
                case DbType.StringFixedLength:
                    {
                        return "String.Empty";
                    }
                default:
                    {
                        return "";
                    }
            }
        }
  public string LocalVariableFormat(string value)
  {
   return value.ToLower();
  }
  public string GetClassName(TableSchema table)
        {
            /*
            if (table.Name.EndsWith("s"))
            {
                return table.Name.Substring(0, table.Name.Length - 1);
            }
            else
            {
                return table.Name;
            }
            */
            if (table == null)
            {
                return null;
            }
            return table.Name;
        }
#endregion script
// --></mce:script>
 


版本测试通过

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/dacong/archive/2009/01/27/3853663.aspx

原创粉丝点击