Asp.Net T4模板生成三层架构
1、T4 Editor安装
T4:根据模板生成文件,例如model等
vs中默认t4模板编码是没有提示和高亮的,需使用以下插件,免费的
https://t4-editor.tangible-engineering.com/Download_T4Editor_Plus_ModelingTools.html
也可以在vs的“工具->扩展和更新”中搜索t4,然后下载
注意:安装的时候请先关闭vs,然后再安装
2、T4简单使用

输入一段t4代码
<#@ template debug="false" hostspecific="false" language="C#" #>
<#@ assembly name="System.Core" #>
<#@ import namespace="System.Linq" #>
<#@ import namespace="System.Text" #>
<#@ import namespace="System.Collections.Generic" #>
<#@ output extension=".cs" #> using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; namespace t4ceshi
{
public class User
{
/// <summary>
/// 用户ID
/// </summary>
public int UserID { get; set; } /// <summary>
/// 用户名
/// </summary>
public string UserName { get; set; } /// <summary>
/// 密码
/// </summary>
public string Password { get; set; } /// <summary>
/// </summary>
public string Email { get; set; } /// <summary>
/// 手机号
/// </summary>
public string Mobile { get; set; }
}
}
输入完成后保存就会自动生成一个类文件

3、利用T4 根据数据库生成三层架构
例如T4生成Model
生成model时不用自己写代码,使用微软dbfirst模式生成model,原理也是t4





搞定,自动生成一个Model.edmx,里边就有所有表的对应的实体
例如T4生成DAL
所有dal生成到一个类文件中,输入下边代码然后保存就会自动生成1个类文件(建议使用此方法,如需扩展新建类即可)
dal.tt代码
<#@ template language="C#" debug="false" hostspecific="true"#>
<#@ include file="EF6.Utility.CS.ttinclude"#>
<#@ output extension=".cs"#>
<#
const string inputFile = @"../cms.Model/Model.edmx";
var textTransform = DynamicTextTransformation.Create(this);
var code = new CodeGenerationTools(this);
var ef = new MetadataTools(this);
var fileManager = EntityFrameworkTemplateFileManager.Create(this);
EdmMetadataLoader loader=new EdmMetadataLoader(textTransform.Host, textTransform.Errors);
EdmItemCollection itemCollection = (EdmItemCollection)loader.CreateEdmItemCollection(inputFile);
#>
using cms.Model;
namespace cms.DAL
{
<#
foreach(EntityType entity in itemCollection.GetItems<EntityType>().OrderBy(e => e.Name))
{
#>
public partial class <#=entity.Name#>DAL : BaseDAL<<#=entity.Name#>>
{ }
<#}#>
} <#+
public static void ArgumentNotNull<T>(T arg, string name) where T : class
{
if (arg == null)
{
throw new ArgumentNullException(name);
}
}
#>
如果想一个表对应一个类文件,请使用下边代码,保存后自动生成多个类文件
<#@ template language="C#" debug="false" hostspecific="true"#>
<#@ include file="EF6.Utility.CS.ttinclude"#>
<#@ output extension=".cs"#>
<#
const string inputFile = @"../cms.Model/Model.edmx";
var textTransform = DynamicTextTransformation.Create(this);
var code = new CodeGenerationTools(this);
var ef = new MetadataTools(this);
var fileManager = EntityFrameworkTemplateFileManager.Create(this);
EdmMetadataLoader loader=new EdmMetadataLoader(textTransform.Host, textTransform.Errors);
EdmItemCollection itemCollection = (EdmItemCollection)loader.CreateEdmItemCollection(inputFile);
#> <#
foreach(EntityType entity in itemCollection.GetItems<EntityType>().OrderBy(e => e.Name))
{
fileManager.StartNewFile(entity.Name + "DAL.cs");
#>
<#//代码片段开始#>
using cms.Model;
namespace cms.DAL
{
public partial class <#=entity.Name#>DAL : BaseDAL<<#=entity.Name#> >
{
//扩展方法添加在这里
//public IEnumerable<<#=entity.Name#> > AddRange(IEnumerable<<#=entity.Name#> > entities)
//{
// dbContext.Set<<#=entity.Name#> >().AddRange(entities);
// dbContext.SaveChanges();
// return entities;
//}
}
}
<#//代码片段结束#> <#
fileManager.EndBlock();
}
#>
<#fileManager.Process();#> <#+
public static void ArgumentNotNull<T>(T arg, string name) where T : class
{
if (arg == null)
{
throw new ArgumentNullException(name);
}
}
#>
例如T4生成BLL
代码同上,把dal修改为bll即可。
建议使用方法1生成一个类文件,如需扩展新建类即可。例如adminBLL想新增一个login方法
BLL层中新建adminBLL.cs
using cms.Model;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace cms.BLL
{
public partial class adminBLL : BaseBLL<admin>
{
//扩展方法添加在这里 //protected adminDAL mydal=new adminDAL(); //public IEnumerable<admin> AddRange(IEnumerable<admin> entities)
//{
// return mydal.AddRange(entities);
//} public bool Login(string name,string password)
{
//doing
return true;
}
}
}
这样,扩展方法和生成的常用方法互不影响,更新时也不影响对方。
4、更新项目中所有T4模板
数据库新增表或者删除了表时需重新生成三层架构
1、打开Model.edmx——右键(从数据库更新模型)——选择新增的表——完成
2、菜单(生成)——转换所有T4模板——三层重新生成完成
Asp.Net T4模板生成三层架构的更多相关文章
- MVC实用架构设计(三)——EF-Code First(3):使用T4模板生成相似代码
前言 经过前面EF的<第一篇>与<第二篇>,我们的数据层功能已经较为完善了,但有不少代码相似度较高,比如负责实体映射的 EntityConfiguration,负责仓储操作的I ...
- 利用T4模板生成ASP.NET Core控制器的构造函数和参数
前言 在ASP.NET Core中引入了DI,并且通过构造函数注入参数,控制器中会大量使用DI注入各种的配置参数,如果配置注入的参数比较多,而且各个控制器需要的配置参数都基本一样的话,那么不断重复的复 ...
- [转]MVC实用架构设计(三)——EF-Code First(3):使用T4模板生成相似代码
本文转自:http://www.cnblogs.com/guomingfeng/p/mvc-ef-t4.html 〇.目录 一.前言 二.工具准备 三.T4代码生成预热 (一) 单文件生成:Hello ...
- 关于ASP.NET或VS2005 搭建三层架构的理解
最近想学习ASP.NET建网站,关于ASP.NET或VS2005 搭建三层架构的理解,网上摘录了一些资料,对于第(2)点的讲解让我理解印象深刻,如下: (1)为何使用N层架构? 因为每一层都可以在仅仅 ...
- 使用T4模板生成POCO类
为什么叫T4?因为简写为4个T. T4(Text Template Transformation Toolkit)是微软官方在VisualStudio 2008中开始使用的代码生成引擎.在 Visua ...
- 【VS外接程序】利用T4模板生成模块代码
引言 记得第一次做asp.net mvc项目时,可以用model直接生成Html的增删改查页面, 没什么特殊要求都可以不用修改直接用了, 觉得很神奇,效率太高了.后来在做客户端开发时,发现很多模块都是 ...
- 使用T4模板生成不同部署环境下的配置文件
在开发企业级应用的时候,通常会有不同的开发环境,比如有开发环境,测试环境,正式环境,生产环境等.在一份代码部署到不同环境的时候,不同环境的配置文件可能需要根据目标环境不同而不同.比如在开发环境中,数据 ...
- CSharpGL(12)用T4模板生成CSSL及其renderer代码
CSharpGL(12)用T4模板生成CSSL及其renderer代码 2016-08-13 由于CSharpGL一直在更新,现在这个教程已经不适用最新的代码了.CSharpGL源码中包含10多个独立 ...
- Visual Studio 2013 EF5实体数据模型 EDMX 使用 T4模板生成后使用 ObjectContext对象
Visual Studio 2013 EF5实体数据模型 EDMX 使用 T4模板生成后的继承对象为DbContext,以前的熟悉的ObjectContext对象不见了,当然使用ObjectConte ...
随机推荐
- 《深入探索Androdi热修复技术原理(阿里巴巴)》--读书笔记
No1: Hybrid就是原生和Html5混合开发app No2: 插件化方法Altas或者DroidPlugin No3: 热修复技术可以把更新补丁上传到云端,此时APP就可以直接从云端下拉补丁直接 ...
- metasploit常用服务扫描和利用模块
metasploit常用服务扫描和利用模块 SMB扫描 smb枚举auxiliary/scanner/smb/smb_enumusers 扫描命名管道auxiliary/scanner/smb/pip ...
- Java中的访问权限控制
Java提供了public, private, protected 三个访问权限修饰词,提供了以下四种访问权限控制机制: 1.包访问权限: 2.Public访问权限: 3.Private访问权限: 4 ...
- MongoDB--集群
为什么需要集群 为了让数据安全 高(24* 7)数据可用性 灾难恢复 无停机维护(如备份,索引重建,压实) 读缩放(额外的副本读取) 副本集对应用程序是透明 设置集群 准备工作 在MongoDB的集群 ...
- codeforces895E. Eyes Closed
题目链接 codeforces895E. Eyes Closed 题解 线段树维护期望和 写出修改两区间的相互影响 就是一个区间修改 emmm考试的代码过不去,这么松的spj都过不去Orz,每次和答案 ...
- ARC 101E.Ribbons on Tree(容斥 DP 树形背包)
题目链接 \(Description\) 给定一棵\(n\)个点的树.将这\(n\)个点两两配对,并对每一对点的最短路径染色.求有多少种配对方案使得所有边都至少被染色一次. \(n\leq5000\) ...
- linux 删除开头是减号的文件名
若有一个文件的文件名为 : -testfile 删除方法为 : 输入“rm — -testfile”或”rm ./-testfile”命令便可顺利删除名为“-testfile”的文件. 如果是其他特殊 ...
- 在Win7 64位旗舰版下,利用Vs2008编译64位的Qt 4.8.2
1.下载qt-everywhere-opensource-src-4.8.2.zip. 2.VS2008需要安装x64编译器. 3.将qt-everywhere-opensource-src-4.8. ...
- selenium+python自动化80-文件下载(不弹询问框)
前言 上一篇是点弹出框上的按钮去保存文件,本篇介绍一种更加优雅的方法,加载Firefox和Chrome的配置文件,不弹出询问框后台下载. 一.FirefoxProfile 1.点下载的时候,如下图,如 ...
- Windows XP Ghost系统安装
一.双击Ghost系统安装工具,进入Ghost界面 二.依次单击[Local]-[Partition]-[From Image],可以简单记作1-2-3. 弹出对话框,选择.GHO文件,比如XP.GH ...