1.新建类库,编译保存为 DDLLY.MyGenerationTemplate.dll
用于Nhibernate 在mygerneration中自动maping文件的基类。
同时要引入四个dll文件
Dnp.Utils, MyMeta,PlugginInterface,System,EnterpriseService
前三个存在于mygerention安装文件中。最后一个是系统自带的。
类库要基于framework 2.0 , 然后把生成的DDLLY.MyGenerationTemplate.dll [release]下拷到mygeneration安装目录下。
using System;
using System.Globalization;
using System.Text.RegularExpressions;
using Dnp.Utils;
using MyMeta;
using Zeus;
using Zeus.DotNetScript;
using Zeus.UserInterface;
namespace DDLLY.MyGenerationTemplate
{
public abstract class DDLNHibernateDotNetScriptTemplate : _DotNetScriptTemplate
{
protected GuiController ui;
protected dbRoot MyMeta;
protected Utils DnpUtils;
public DDLNHibernateDotNetScriptTemplate(IZeusContext context)
: base(context)
{
ui = context.Objects["ui"] as GuiController;
MyMeta = context.Objects["MyMeta"] as dbRoot;
DnpUtils = context.Objects["DnpUtils"] as Utils;
}
/// <summary>
/// 前缀
/// </summary>
protected string _prefix;
/// <summary>
/// 创建XML
/// </summary>
protected bool _CreatingXML = false;
protected string _NullSufix;
protected string ConvertNHibernate(string Type)
{
string retVal = Type;
switch (Type)
{
case "bool":
retVal = "Boolean";
break;
case "byte":
retVal = "Byte";
break;
case "sbyte":
retVal = "SByte";
break;
case "char":
retVal = "Char";
break;
case "decimal":
retVal = "Decimal";
break;
case "double":
retVal = "Double";
break;
case "float":
retVal = "Single";
break;
case "int":
retVal = "Int32";
break;
case "uint":
retVal = "UInt32";
break;
case "long":
retVal = "Int64";
break;
case "ulong":
retVal = "UInt64";
break;
case "short":
retVal = "Int16";
break;
case "ushort":
retVal = "UInt16";
break;
case "string":
retVal = "String";
break;
}
return retVal;
}
//protected string ColumnToMemberVariable(IColumn Column)
//{
// return _prefix + UniqueColumn(Column).ToLower();
//}
//protected string ColumnToPropertyName(IColumn Column)
//{
// return ToPascalCase(UniqueColumn(Column));
//}
//protected string ColumnToArgumentName(IColumn Column)
//{
// return UniqueColumn(Column).ToLower();
//}
//protected string ColumnToNHibernateProperty(IColumn Column)
//{
// return _prefix + UniqueColumn(Column);
//}
// nhibernate doesn't have these, so use the existing types
protected string ColumnToNHibernateType(IColumn Column)
{
string retVal = Column.LanguageType;
switch (retVal)
{
case "sbyte":
retVal = "byte";
break;
case "uint":
retVal = "int";
break;
case "ulong":
retVal = "long";
break;
case "ushort":
retVal = "short";
break;
case "bool":
case "decimal":
case "float":
case "byte":
case "short":
case "int":
case "long":
if (!_CreatingXML)
{
if (Column.IsNullable)
{
retVal = retVal + _NullSufix;
}
}
break;
}
return retVal;
}
///// <summary>
///// 首字母大写
///// </summary>
///// <param name="name"></param>
///// <returns></returns>
//protected string ToLeadingCaps(string name)
//{
// char[] chars = name.ToLower().ToCharArray();
// chars[0] = Char.ToUpper(chars[0]);
// return new string(chars);
//}
/// <summary>
/// 首字母小写
/// </summary>
/// <param name="name"></param>
/// <returns></returns>
private string ToLeadingLower(string name)
{
char[] chars = name.ToCharArray();
chars[0] = Char.ToLower(chars[0]);
return new string(chars);
}
/// <summary>
/// 私有成员名
/// </summary>
/// <param name="name"></param>
/// <returns></returns>
protected string ToVariableName(string name)
{
return _prefix + name;
}
/// <summary>
/// 参数名
/// </summary>
/// <param name="name"></param>
/// <returns></returns>
protected string ToArgumentName(string name)
{
return ToLeadingLower(name);
}
///// <summary>
///// 统计必需(不允许空)的的字段个数
///// </summary>
///// <param name="Columns"></param>
///// <returns></returns>
//protected int CountRequiredFields(IColumns Columns)
//{
// return Columns.Count - CountNullableFields(Columns);
//}
///// <summary>
///// 统计允许为空的字段个数
///// </summary>
///// <param name="Columns"></param>
///// <returns></returns>
//protected int CountNullableFields(IColumns Columns)
//{
// int i = 0;
// foreach (IColumn c in Columns)
// {
// if (c.IsNullable)
// {
// i++;
// }
// }
// return i;
//}
/// <summary>
/// 统计唯一字段的个数(非空且为主键)
/// </summary>
/// <param name="Columns"></param>
/// <returns></returns>
protected int CountUniqueFields(IColumns Columns)
{
int i = 0;
foreach (IColumn c in Columns)
{
if (!c.IsNullable && c.IsInPrimaryKey)
{
i++;
}
}
return i;
}
/// <summary>
/// 根据IColumn获得不同的Generator
/// </summary>
/// <param name="Column"></param>
/// <returns></returns>
protected string GetGeneratorString(IColumn Column)
{
if (Column.DataTypeName == "uniqueidentifier")
{
return "guid";
}
if (Column.IsAutoKey)
{
return "native";
}
else
{
return "assigned";
}
}
/// <summary>
/// 表名转换为类名
/// </summary>
/// <param name="tableName"></param>
/// <returns></returns>
protected string TableNameToClassName(string tableName)
{
int index = tableName.LastIndexOf("_");
return tableName.Substring(index + 1);
}
}
}
想想你的文章写的特别好www.jiwenlaw.com