好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

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

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,未来还会支持更多的数据库 )

  本文使用以下工具:

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

    操作步骤   创建控制台应用程序 Demo   通过Nuget添加ELinq 的引用:在Nuget控制台中输入:install-package ELinq, Nuget会自动的将你引用的库的这个库的依赖文件添加到你的项目引用中.   配置SqlServer数据库连接信息。添加App.Config 文件,并添加如下的配置信

 <  add   name  ="Northwind"   connectionString  ="Data Source=.;Initial Catalog=northwind;Persist Security Info=True;User ID=sa;Password="  
providerName  ="System.Data.SqlClient"   /> 

编译项目,保证ELinq已经输出到Bin目录下,为T4 模版准备

添加T4 文件,MultipleOutputHelper.ttinclude,该文件的作用是:生成多文件,获取当前活动项目的信息(配置文件路径,项目路径,数据路径,AppConfig等)

View Code

添加T4文件:NorthwindContext.tt

View Code

保存一下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 模版代码生成器包,供大家方便使用、

技术支持:

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

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

 

 

分类:  ELinq

作者: Leo_wl

    

出处: http://www.cnblogs.com/Leo_wl/

    

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

版权信息

查看更多关于ELinq+T4模版引擎制作多文件实体代码生成器的详细内容...

  阅读:51次