• CodeSmith生成数据库视图实体类


    CodeSmith生成数据库视图实体类

    打开开始--所有程序---CodeSmith Professional 5.0.1.4983--CodeSmith Explorer

    新建立到所要操作数据库的连接名称自定义为DB

    打开开始--所有程序---CodeSmith Professional 5.0.1.4983--CodeSmith Studio

    新建立一个模板文件BusinessObjctForView.cst(模板文件可以Build和运行)

    新建立一个文件ViewUtility.cs(数据库字段到VS2005数据类型映射,命名空间和上面的命名空间保持一致)

    COPY下面的代码然后点tools/build/run就完成了数据表实体类文件的生成

    注意由模板BusinessObjctForView.cst生成的"数据表名.cs"实体类文件所属命名空间Common.Model和调用的(ViewUtility.cs)类文件的所属命名空间Common.Data的存在与否.在VS2005的工程中必须存在或者按您的需求自行更改。

    BusinessObjctForView.cst代码如下:

    <%@ CodeTemplate Language="C#" ResponseEncoding="UTF-8" TargetLanguage="T-SQL" Description="生成更新视图的存储过程." %>
    <%@ Assembly Name="SchemaExplorer" %>
    <%@ Import Namespace="SchemaExplorer" %>
    <%@ Property Name="SourceTable" Type="SchemaExplorer.ViewSchema" Category="Context" Description="存储过程操作的视图名称." %>
    <%@ Assembly Src="ViewUtility.cs" %>
    <%@ Import Namespace="Common.Data" %>
    <script runat="template">
        ViewUtility rule=new ViewUtility();
    </script>
    using System;
    using System.Collections;
    using System.Collections.Generic;
    using System.Data;

    namespace Common.Model
    {
        /// <summary>
        /// 读取数据库对应的视图 '<%= SourceTable.Name %>'
        /// </summary>
        [Serializable]
        public class <%= SourceTable.Name %>
        {
        #region Private Member
            <% for (int i = 0; i < SourceTable.Columns.Count; i++) { %>
            private <%= rule.GetCSharpVariableType(SourceTable.Columns[i]) %> _<%= SourceTable.Columns[i].Name %>;
        <% } %>
        #endregion

        #region Constructor
            public <%= SourceTable.Name %>() {}

            public <%= SourceTable.Name %>(
                    <% for (int i = 0; i < SourceTable.Columns.Count-1; i++) { %>
            <%= rule.GetCSharpVariableType(SourceTable.Columns[i]) %> <%= SourceTable.Columns[i].Name %>,
        <% } %>
        <%= rule.GetCSharpVariableType(SourceTable.Columns[SourceTable.Columns.Count-1]) %> <%= SourceTable.Columns[SourceTable.Columns.Count-1].Name %>
            )
            {
            <% for (int i = 0; i < SourceTable.Columns.Count; i++) { %>
             _<%= SourceTable.Columns[i].Name %> = <%= SourceTable.Columns[i].Name %>;
        <% } %>
            }
        #endregion

        #region Public Properties
        <% for (int i = 0; i < SourceTable.Columns.Count; i++) { %>
            public <%= rule.GetCSharpVariableType(SourceTable.Columns[i]) %> <%= rule.GetCamelCaseName(SourceTable.Columns[i].Name) %>
            {
                get { return _<%= SourceTable.Columns[i].Name %>; }
                set { _<%= SourceTable.Columns[i].Name %> = value; }
            }
        <% } %>
        #endregion
        }
    }

    ViewUtility.cs代码如下:

    using System;
    using System.Text;
    using CodeSmith.Engine;
    using SchemaExplorer;
    using System.ComponentModel;
    using System.Data;

    namespace Common.Data
    {
        //// <summary>
        /// CodeSmith生成SQL Server视图的实体类脚本
        /// </summary>
        public class ViewUtility
        {

            //get Columns info by TableName
            public ViewColumnSchemaCollection GetColumnCollectionByTable(ViewSchema table)
            {
                ViewColumnSchemaCollection columns = new ViewColumnSchemaCollection(table.Columns);
                return columns;
            }

            //Get camelcase name,such as Customer,
            public string GetCamelCaseName(string str)
            {
                return str.Substring(0,1).ToUpper()+str.Substring(1);
            }

           //Get ,user,private const String USER_FIELD = "User"
            public string GetMemberConstantDeclarationStatement(ColumnSchema column)
            {
                return GetMemberConstantDeclarationStatement("public const String ",column);
            }

            //such as public const String USER_TABLE = "User"
            public string GetTableConstantDeclarationStatement(ViewSchema table)
            {
                return GetMemberConstantDeclarationStatement("public const String ",table);
            }
            //suck as USER_TABLE
            public string GetUpperStatement(ViewSchema table)
            {
                return     table.Name.ToUpper()+"_TABLE";
           }
            //suck as USER_FIELD
            public string GetUpperStatement(ColumnSchema column)
           {
               return column.Name.ToUpper()+"_FIELD";
            }

            // such as USER_TABLE = "User"
            public string GetMemberConstantDeclarationStatement(string protectionLevel, ViewSchema table)
            {
                return protectionLevel+GetUpperStatement(table)+" = "+GetCamelCaseName(table.Name)+"";
            }

            //such as USERID_FIELD = "Userid"
            public string GetMemberConstantDeclarationStatement(string protectionLevel,ColumnSchema column)
            {
                return protectionLevel+GetUpperStatement(column)+" = "+GetCamelCaseName(column.Name)+"";
            }

            public string GetCSharpVariableType(ViewColumnSchema column)
            {
                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 "int";
                    case DbType.Currency: return "decimal";
                    case DbType.Date: return "DataTime";
                    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";
                }

                return null;
            }

            public string GetCSharpBaseType(ViewColumnSchema column)
           {
                switch(column.DataType)
               {
                    case DbType.AnsiString: return "System.String";
                    case DbType.AnsiStringFixedLength: return "System.String";
                    case DbType.Binary: return "System.Byte[]";
                    case DbType.Boolean: return "System.Boolean";
                    case DbType.Byte: return "System.Int32";
                    case DbType.Currency: return "System.Decimal";
                    case DbType.Date: return "System.DataTime";
                    case DbType.DateTime: return "System.DataTime";
                    case DbType.Decimal: return "System.Decimal";
                    case DbType.Double: return "System.Double";
                    case DbType.Guid: return "System.Guid";
                    case DbType.Int16: return "System.Int16";
                    case DbType.Int32: return "System.Int32";
                    case DbType.Int64: return "System.Int64";
                    case DbType.Object: return "System.Object";
                    case DbType.SByte: return "System.SByte";
                    case DbType.Single: return "System.Single";
                    case DbType.String: return "System.String";
                    case DbType.StringFixedLength: return "System.String";
                    case DbType.Time: return "System.TimeSpan";
                    case DbType.UInt16: return "System.UInt16";
                    case DbType.UInt32: return "System.UInt32";
                    case DbType.UInt64: return "System.UInt64";
                    case DbType.VarNumeric: return "System.Decimal";
                }
                return null;
            }
        }
    }

  • 相关阅读:
    redis持久化方案之RDB
    redis实现分布式锁
    redis数据类型(图解)
    js上拉加载
    apicloud直接上传图片
    layer.confirm
    json数组去重
    js解决手机键盘影响定位的问题
    click禁用事件
    ipcloud上传裁切图片,保存为base64再压缩传给后台
  • 原文地址:https://www.cnblogs.com/xqf222/p/3306844.html
Copyright © 2020-2023  润新知