zoukankan      html  css  js  c++  java
  • ELinq+T4模版引擎制作多文件实体代码生成器

    新年首作-ELinq+T4模版引擎制作多文件实体代码生成器

    2013-02-15 17:48 by 风云, 303 阅读, 6 评论, 收藏编辑

      关于代码生成器的文章网上已经多的不能太多了,在6年前我写过两篇文章介绍代码生成器的,一篇主要代码生成器的7种模型架构设计思想:也谈代码生成器,另外一篇再谈代码生成器介绍了基于其中一种模型架构的实践文章,现在回顾一下6年前的文章拿到现在其设计思想也从不过时,呵呵自大了。好了废话不多说,今天给大家分享一下利用ELinq内置的数据库元数据模型和T4 模版引擎制作多文件实体代码生成器。(ELinq:是一个轻量简单易用的开源Linq ORM数据访问组件,支持Nullable类型和枚举类型,支持根据实体类自动建库建表建关系,支持根据数据库通过T4模版自动生成实体代码,对Linq 的谓词提供了完美的支持,旨在让绝大部份的主流数据库都使用 Linq 来进行程序开发,让开发人员访问数据库从SQL中解放出来,易学易用上手快,配置简单,并且提供了源代码下载,方便定制。支持多数据库,目前支持 Access、SQLServer、SqlCE、  SQLite、MySQL、ORACLE,未来还会支持更多的数据库

      本文使用以下工具:

    1. VS2010 SP1
    2. T4 模版引擎
    3. ELinq 数据库元数据模型(借助ELinq强大的ORM框架,支持多种数据库)
    4. SqlServer 数据库

        操作步骤

    1.   创建控制台应用程序 Demo
    2.   通过Nuget添加ELinq 的引用:在Nuget控制台中输入:install-package ELinq, Nuget会自动的将你引用的库的这个库的依赖文件添加到你的项目引用中.
    3.   配置SqlServer数据库连接信息。添加App.Config 文件,并添加如下的配置信
      <add name="Northwind" connectionString="Data Source=.;Initial Catalog=northwind;Persist Security Info=True;User ID=sa;Password="
      providerName="System.Data.SqlClient" />
    4. 编译项目,保证ELinq已经输出到Bin目录下,为T4 模版准备

    5. 添加T4 文件,MultipleOutputHelper.ttinclude,该文件的作用是:生成多文件,获取当前活动项目的信息(配置文件路径,项目路径,数据路径,AppConfig等)
      View Code
    6. 添加T4文件:NorthwindContext.tt
      View Code
    7. 保存一下NorthwindContext.tt 文件,系统会自动创建实体、实体间的关系(一对多,多对一)和DbContext, 见下图

     

      8. 运行代码查看

       补充

      1. ELinq 数据库Schema元数据结构图(只要配置好了DbConfiguration对象,只需要调用其Schema属性就会自动得到如下Schema数据

       

          2. ELinq 还提供了表名到类名、列名到属性等转换约定,针对特殊情况可以自行定制

    复制代码
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using NLite.Data.Schema;
    
    namespace NLite.Data.CodeGeneration
    {
    
         /// <summary>
        /// 命名约定
        /// </summary>
        public static class NamingConversion
        {
            /// <summary>
            /// 缺省命名约定
            /// </summary>
            public static readonly INamingConversion Default = new DefaultNamingConversion();
        }
    
        /// <summary>
        /// 命名约定
        /// </summary>
        public interface INamingConversion
        {
            /// <summary>
            /// 表名转集合名
            /// </summary>
            /// <param name="tableName"></param>
            /// <returns></returns>
            string QueryableName(string tableName);
            /// <summary>
            /// 表名转类名
            /// </summary>
            /// <param name="tableName"></param>
            /// <returns></returns>
            string ClassName(string tableName);
    
            /// <summary>
            /// 列名转字段名
            /// </summary>
            /// <param name="columnName"></param>
            /// <returns></returns>
            string FieldName(string columnName);
    
            /// <summary>
            /// 列名属性名转
            /// </summary>
            /// <param name="columnName"></param>
            /// <returns></returns>
            string PropertyName(string columnName);
    
            /// <summary>
            /// 得到类的数据类型
            /// </summary>
            /// <param name="col"></param>
            /// <returns></returns>
            string DataType(IColumnSchema col);
    
            /// <summary>
            /// 得到外键对应的导航属性名称
            /// </summary>
            /// <param name="fk"></param>
            /// <returns></returns>
            string ManyToOneName(IForeignKeySchema fk);
        }
    }
    复制代码

       3. 默认情况下自定义DbContext名称和T4模版文件的名称一致

       4. 如何修该代码生成的命名空间以及数据库配置

      

    总结

        最后附上Demo代码,大家可以修改一下配置文件,即可支持其它数据库的代码生成,也可以修改T4 模版DIY 自己的代码生成器!随后会发布基于Nuget安装方式的T4 模版代码生成器包,供大家方便使用、

    技术支持:

    1. 官方网站
    2. Nuge 下载页面
    3. ORM组件 ELinq系列
    4. ORM组件 ELinq 更新日志
    5. ORM组件 ELinq 使用答疑
    6. 在我的博客留言,我会尽可能地抽时间来答复大家的问题。
    7. 加入 ELinq用户的 QQ群(271342583)。

       新年伊始,祝大家春节愉快,万事如意,谢谢大家的阅读,麻烦大伙点一下推荐,再次谢谢大家。 ^_^

     
     
    分类: ELinq
  • 相关阅读:
    微服务架构技术栈选型手册(万字长文)
    Visual Studio 2013 always switches source control plugin to Git and disconnect TFS
    Visual Studio 2013 always switches source control plugin to Git and disconnect TFS
    MFC对话框中使用CHtmlEditCtrl
    ATL开发 ActiveX控件的 inf文件模板
    ActiveX: 如何用.inf和.ocx文件生成cab文件
    Xslt 1.0中使用Array
    如何分隔两个base64字符串?
    An attempt was made to load a program with an incorrect format
    JQuery 公网 CDN
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/2913135.html
Copyright © 2011-2022 走看看