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);
        }
    }
}

本文由 hcb 创作,采用 知识共享署名 3.0,可自由转载、引用,但需署名作者且注明文章出处。

还不快抢沙发

添加新评论