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.ttView 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模版引擎制作多文件实体代码生成器的详细内容...