EF CodeFirst 使用T4模板 生成文件
小编是个实用主义者,并没有深入的去理解T4的原理。只是根据自己的需求,在博客园里的前辈哪里找的资料,结合自己的理解,在项目中使用了T4模板。
最近的项目用了他,很方便,节省了不少代码量。
想利用T4做个代码生成器,目前比较忙,使用一直没有时间去做。如果大家有好的思路或者方法,请多多指教。
小编比较懒,又不怎么会排版,所以就先截下图,让大家可以比较直观的先看看需要哪些文件和步骤。
首先,定义一个接口,代表一个领域实体。在定义一个实体集成这个接口
面向接口编程的各种好处就不提了。
/// <summary>
/// 代表一个领域实体
/// </summary>
public interface IEntity
{
Guid ID { get; }
}
public abstract class Entity : IEntity
{
public Guid ID { get; set; }
//这里可以写一些领域实体的基本方法。面向对象么 有时总会有写对象自己的公用的方法.类似 freamework的 Object
}
public class User : Entity
{
}
之后新建一个T4模板文件。先上代码后面解释下关键的地方
<#@ template debug="false" hostspecific="true" language="C#" #>
<#@ assembly name="System.Core" #>
<#@ assembly name="$(SolutionDir)\Model\bin\Debug\Model.dll" #>
<#@ import namespace="Model" #>
<#@ import namespace="System.Linq" #>
<#@ import namespace="System.Text" #>
<#@ import namespace="System.Collections.Generic" #>
<#@ import namespace="System.IO"#>
<#@ import namespace="System"#>
<#@ import namespace="System.Configuration"#>
<#@ output extension=".cs" #>
<#@include file="$(SolutionDir)\packages\MultipleOutputHelper.ttinclude"#> <#
var assembly = System.Reflection.Assembly.GetAssembly(typeof(IEntity));
var types = assembly.GetTypes().Where(x => typeof(IEntity).IsAssignableFrom(x) && !x.IsAbstract && !x.IsInterface); var manager = Manager.Create(Host, GenerationEnvironment);
foreach (var type in types)
{ // 定义输出文件
manager.StartNewFile(type.Name+"TypeConfiguration.cs");
#>
using System.ComponentModel.DataAnnotations.Schema;
using System.Data.Entity.ModelConfiguration;
using Model; namespace Data
{ public class <#=type.Name#>TypeConfiguration : EntityTypeConfiguration<<#=type.Name#>>
{
public <#=type.Name#>TypeConfiguration()
{
HasKey(c => c.ID);
Property(c => c.ID)
.IsRequired()
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity); ToTable("<#=type.Name#>");
}
}
}
<#
// 结束输出文件
manager.EndBlock();
}
// 执行编译
manager.Process(true);
#>
<#@ assembly name="$(SolutionDir)\Model\bin\Debug\Model.dll" #>//这个事为了获取领域实体所在的dll文件。之后需要反射这个dll获取集成实体接口。
$(SolutionDir) //这个是VS的宏命令,获取当前的解决方案路径。有不少的宏命令,具体可以找博客园里找下相关的内容,这里就不列举出来了。
<#@ import namespace="Model" #> //引用这个这个dll。类似using
<#@include file="$(SolutionDir)\packages\MultipleOutputHelper.ttinclude"#>//这个文件很关键,是个老外写的,具体在哪里找不到了。她会帮助我们生成cs文件。这个文件在我上传附件的packages里面。
之后的步骤就是反射的操作了。
写得有些。。。望大家多见谅。
附件 : T4Demo.rar
EF CodeFirst 使用T4模板 生成文件的更多相关文章
- 真实项目中VS2015中自建T4模板生成文件的使用
有可能许多小伙伴们发现,vs2015和2012的自带T4模板中的.tt文件改变非常之多,如果仅仅copyEF系统自己生成的模板文件,那可累了.以下是我自己整理的在2012和2015中都可以试用的代码. ...
- EF CodeFirst 使用T4模板
实用等级:★★★★★ 首先,定义一个接口,代表一个领域实体.在定义一个实体集成这个接口,面向接口编程的各种好处就不提了. /// <summary> /// 代表一个领域实体 /// &l ...
- T4模板生成文件要点记录
可以使用 $(variableName) 语法引用 Visual Studio 或 MSBuild 变量(如 $(SolutionDir)),以及使用 %VariableName% 来引用环境变量.介 ...
- MVC实用架构设计(三)——EF-Code First(3):使用T4模板生成相似代码
前言 经过前面EF的<第一篇>与<第二篇>,我们的数据层功能已经较为完善了,但有不少代码相似度较高,比如负责实体映射的 EntityConfiguration,负责仓储操作的I ...
- [转]MVC实用架构设计(三)——EF-Code First(3):使用T4模板生成相似代码
本文转自:http://www.cnblogs.com/guomingfeng/p/mvc-ef-t4.html 〇.目录 一.前言 二.工具准备 三.T4代码生成预热 (一) 单文件生成:Hello ...
- Asp.Net T4模板生成三层架构
1.T4 Editor安装 T4:根据模板生成文件,例如model等 vs中默认t4模板编码是没有提示和高亮的,需使用以下插件,免费的 https://t4-editor.tangible-engin ...
- 使用T4模板生成不同部署环境下的配置文件
在开发企业级应用的时候,通常会有不同的开发环境,比如有开发环境,测试环境,正式环境,生产环境等.在一份代码部署到不同环境的时候,不同环境的配置文件可能需要根据目标环境不同而不同.比如在开发环境中,数据 ...
- CSharpGL(12)用T4模板生成CSSL及其renderer代码
CSharpGL(12)用T4模板生成CSSL及其renderer代码 2016-08-13 由于CSharpGL一直在更新,现在这个教程已经不适用最新的代码了.CSharpGL源码中包含10多个独立 ...
- 利用T4模板生成ASP.NET Core控制器的构造函数和参数
前言 在ASP.NET Core中引入了DI,并且通过构造函数注入参数,控制器中会大量使用DI注入各种的配置参数,如果配置注入的参数比较多,而且各个控制器需要的配置参数都基本一样的话,那么不断重复的复 ...
随机推荐
- 域名管理系统DNS
域名系统DNS,将域名转化为ip地址.域名到ip地址解析过程是以这种方式进行的,当某一程序需要把主机名解析为IP地址时,该应用进程就调用解析程序(本地程序),这时候该进程就变成了DNS的一个客户,将待 ...
- Erlang C1500K长连接推送服务-内存
上篇 Erlang C1500K长连接推送服务-性能 提到:150w连接,使用了23GB内存,每个连接占用15KB,约一半是内核使用. 大概分析一下: 1. Erlang 节点 12GB,内部因为有内 ...
- js抛物线动画——加入购物车动效
参考文章:http://www.zhangxinxu.com/wordpress/2013/12/javascript-js-元素-抛物线-运动-动画/ parapola.js /*! * by zh ...
- 【bb平台刷课记】wireshark结合实例学抓包
[bb平台刷课记]wireshark结合实例学抓包 背景:本校形势与政策课程课需要在网上观看视频的方式来修得学分,视频网页自带"播放器不可快进+离开窗口自动暂停+看完一集解锁下一集(即不能同 ...
- kvm虚拟机静态和动态迁移
一.kvm虚拟机静态迁移 1.静态迁移就是虚拟机在关机状态下,拷贝虚拟机虚拟磁盘文件与配置文件到目标虚拟主机中,实现的迁移. (1)虚拟主机各自使用本地存储存放虚拟机磁盘文件 本文实现基于本地磁盘存储 ...
- 终于遇到app不兼容,你遇到了么?
题记: 如果支付宝和QQ不兼容,要二选一,你会怎么选择? 首先了解一下背景: 笔者最近发现,微众银行的app升级到1.7.4, 而患有轻度强迫症的人是迫不及待的点了升级. 第一次,居然安装包安装不成功 ...
- android 6.0 高通平台sensor 工作机制及流程(原创)
最近工作上有碰到sensor的相关问题,正好分析下其流程作个笔记. 这个笔记分三个部分: sensor硬件和驱动的工作机制 sensor 上层app如何使用 从驱动到上层app这中间的流程是如何 Se ...
- Adobe illustrator & Photoshop 处理图片
Adobe illustrator 置入,可以将多张图片放在一张纸 (一个sheet)里面. Adobe photoshop: 新建一个图层,然后置入,将图片导入,然后裁剪,最后另存为就可以得到最后的 ...
- C++ 字符处理函数
C/C++里有一个头文件#include <ctype.h>,里面定义了很多字符函数,在实际开发中,用起来很方面. int isalpha(int ch) 若ch是字母('A'-'Z', ...
- wpf——三维学习1
以下xmal是我从msdn上复制下来的.是用于在wpf中创建3d模型的实例链接https://msdn.microsoft.com/zh-cn/library/ms747437.aspx看它的使用方式 ...