使用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