当前位置:编程学习 > C#/ASP.NET >>

求助:CodeSmith+oracle三层模板

在论坛下了个CodeSmith%2BOracle+三层模板,模版编译没有问题,用CodeSmith配置了数据库连接(测试正常),但点击generate,没有生成Model实体类代码。
表结构:
CREATE TABLE TELLER
(
  TELLER_ID         CHAR(8 BYTE)  PRIMARY KEY,
  INT_ORG_ID        CHAR(9 BYTE),
  GENDER_CD         CHAR(1 BYTE),
  TELLER_LEVEL_NUM  CHAR(1 BYTE),
  PRIMARY KEY(TELLER_ID)

实体类结构:
namespace MODEL
{
     public class Teller
    {
         
    }

model.cst模块
<%@ CodeTemplate Language="C#" TargetLanguage="C#"  ResponseEncoding="UTF-8" Description="Generates a very simple business object." %>
<%@ Property Name="NameSpace" Type="String" Category="Context" Default="Synjones.Radar" Description="The namespace to use for this class" %>
<%@ 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" %>
// =================================================================== 
// 项目说明
//====================================================================
// Synjones@Copy Right 2006-2008
// 文件: <%= GetClassName(SourceTable) %>Info.cs
// 项目名称:<%= NameSpace %>
// 创建时间:<%=DateTime.Now.ToShortDateString() %>
// ===================================================================
using System;
using System.Runtime.Serialization;

namespace <%= NameSpace %>.Model
{
/// <summary>
///<%= GetClassName(SourceTable)%>数据实体
/// </summary>
[DataContract]
public class <%= GetClassName(SourceTable)%>Info
{
#region 变量定义
<% foreach (ColumnSchema column in SourceTable.Columns) { %>
///<summary>
///<%=column.Description.Replace("\n","") %>
///</summary>
<%= GetMemberVariableDeclarationStatement(column) %>
<% } %>
#endregion

#region 构造函数

///<summary>
///<%=SourceTable.Description %>
///</summary>
public <%= GetClassName(SourceTable)%>Info()
{
}
///<summary>
///<%=SourceTable.Description %>
///</summary>
<% foreach (ColumnSchema column in SourceTable.Columns) { %>
///<param name=<%=column.Name.ToLower()%>><%=column.Description.Replace("\n","") %></param>
<% } %>
public <%= GetClassName(SourceTable)%>Info
(
<%= GetConstructorParameters() %>
)
{
<%= GetAssignValue() %>
}
#endregion

#region 公共属性


<% for (int i = 0; i < SourceTable.Columns.Count; i++) { %>
///<summary>
///<%=SourceTable.Columns[i].Description.Replace("\n","") %>
///</summary>
[DataMember(Name = "<%= GetClassName(SourceTable.Columns[i].Name) %>", IsRequired = false, Order = <%=i%>)]
public <%= GetCSharpVariableType(SourceTable.Columns[i]) %> <%= GetClassName(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"); %>
<%}%>

#endregion

}
}
<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 GetConstructorParameters()
{
string ret = "";
foreach(ColumnSchema column in SourceTable.Columns)
{
ret += GetCSharpVariableType(column) + " " + GetPropertyName(column).ToLower() + ",\n\t\t\t";
}
return ret.Substring(0, ret.Length - 5);
}

public string GetAssignValue()
{
string ret = "";
foreach(ColumnSchema column in SourceTable.Columns)
{
ret += "this."+GetMemberVariableName(column) +  (new String(' ', GetPropertyNameMaxLength() - GetPropertyNameLength(column))) + " = " + GetPropertyName(column).ToLower() + ";\n\t\t\t";
}
return ret;
}

public string GetReaderAssignmentStatement(ColumnSchema column, int index)
{
string statement = "if (!reader.IsDBNull(" + index.ToString() + ")) ";
statement += GetMemberVariableName(column) + " = ";

if (column.Name.EndsWith("TypeCode")) statement += "(" + column.Name + ")";

statement += "reader." + GetReaderMethod(column) + "(" + index.ToString() + ");";

return statement;
}

public string GetCamelCaseName(string value)
{
return value.Substring(0, 1).ToLower() + value.Substring(1);
}

public string GetMemberVariableName(ColumnSchema column)
{
//string propertyName = GetPropertyName(column);
string propertyName = column.Name;
string memberVariableName =  propertyName.ToLower();

return memberVariableName;
}


public string GetPropertyName(ColumnSchema column)
{
string propertyName = column.Name;

if (propertyName == column.Table.Name + "Name") return "Name";
if (propertyName == column.Table.Name + "Description") return "Description";

if (propertyName.EndsWith("TypeCode")) propertyName = propertyName.Substring(0, propertyName.Length - 4);

return propertyName;
}

public int GetPropertyNameLength(ColumnSchema column)
{
return (GetPropertyName(column)).Length;
}
public int GetPropertyNameMaxLength()
{
int ret = 0;
foreach(ColumnSchema column in SourceTable.Columns)
{
ret = ret < GetPropertyNameLength(column)?GetPropertyNameLength(column):ret;
}
return ret;
}

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 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: return "decimal";
default:
{
return "__UNKNOWN__" + column.NativeType;
}
}
}

public string GetReaderMethod(ColumnSchema column)
{
switch (column.DataType)
{
case DbType.Byte:
{
return "GetByte";
}
case DbType.Int16:
{
return "GetInt16";
}
case DbType.Int32:
{
return "GetInt32";
}
case DbType.Int64:
{
return "GetInt64";
}
case DbType.AnsiStringFixedLength:
case DbType.AnsiString:
case DbType.String:
case DbType.StringFixedLength:
{
return "GetString";
}
case DbType.Boolean:
{
return "GetBoolean";
}
case DbType.Guid:
{
return "GetGuid";
}
case DbType.Currency:
case DbType.Decimal:
{
return "GetDecimal";
}
case DbType.DateTime:
case DbType.Date:
{
return "GetDateTime";
}
case DbType.Binary:
{
return "GetBytes";
}
default:
{
return "__SQL__" + column.DataType;
}
}
}

public string GetClassName(TableSchema table)
{

if(table==null)
{
    return null;
}
return table.Name.Substring(0, 1).ToUpper() + table.Name.Substring(1).ToLower() ;
}
public string GetClassName(string str1)
{

if(str1==null)
{
    return null;
}
if(str1.Length ==1 )
{
return str1.ToLower();
}
return str1.Substring(0, 1).ToUpper() + str1.Substring(1).ToLower() ;
}
public string GetSqlDbType(ColumnSchema column)
{
switch (column.NativeType)
{
case "bigint": return "BigInt";
case "binary": return "Binary";
case "bit": return "Bit";
case "char": return "Char";
case "datetime": return "DateTime";
case "decimal": return "Decimal";
case "float": return "Float";
case "image": return "Image";
case "int": return "Int";
case "money": return "Money";
case "nchar": return "NChar";
case "ntext": return "NText";
case "numeric": return "Decimal";
case "nvarchar": return "NVarChar";
case "real": return "Real";
case "smalldatetime": return "SmallDateTime";
case "smallint": return "SmallInt";
case "smallmoney": return "SmallMoney";
case "sql_variant": return "Variant";
case "sysname": return "NChar";
case "text": return "Text";
case "timestamp": return "Timestamp";
case "tinyint": return "TinyInt";
case "uniqueidentifier": return "UniqueIdentifier";
case "varbinary": return "VarBinary";
case "varchar": return "VarChar";
default: return "__UNKNOWN__" + column.NativeType;
}
}

public string GetPrimaryKeyType(TableSchema table)
{
if (table.PrimaryKey != null)
{
if (table.PrimaryKey.MemberColumns.Count == 1)
{
return GetCSharpVariableType(table.PrimaryKey.MemberColumns[0]);
}
else
{
throw new ApplicationException("This template will not work on primary keys with more than one member column.");
}
}
else
{
throw new ApplicationException("This template will only work on tables with a primary key.");
}
}

public override string GetFileName()
{
return this.GetClassName(this.SourceTable) + "Info.cs";
}
#endregion script
</script>
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,