• 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
  • 相关阅读:
    eclipse报错 : One or more constraints have not been satisfied.
    关于一个计算机同时装两个jdk对应两个eclipse
    开发测试类2
    工作中测试类1
    Spring 读取classpath下的文件存到map里面
    CentOS6下安装JDK并且部署tomcat容器
    ConOS安装mysql5.7 及简单配置
    用sqlyog迁移mysql数据库
    FindBugs缺陷库
    使用NumberPicker定制自己喜欢的Date&TimePicker
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/2913135.html
Copyright © 2020-2023  润新知