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>
/// Email
/// </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模板生成三层架构的更多相关文章

  1. MVC实用架构设计(三)——EF-Code First(3):使用T4模板生成相似代码

    前言 经过前面EF的<第一篇>与<第二篇>,我们的数据层功能已经较为完善了,但有不少代码相似度较高,比如负责实体映射的 EntityConfiguration,负责仓储操作的I ...

  2. 利用T4模板生成ASP.NET Core控制器的构造函数和参数

    前言 在ASP.NET Core中引入了DI,并且通过构造函数注入参数,控制器中会大量使用DI注入各种的配置参数,如果配置注入的参数比较多,而且各个控制器需要的配置参数都基本一样的话,那么不断重复的复 ...

  3. [转]MVC实用架构设计(三)——EF-Code First(3):使用T4模板生成相似代码

    本文转自:http://www.cnblogs.com/guomingfeng/p/mvc-ef-t4.html 〇.目录 一.前言 二.工具准备 三.T4代码生成预热 (一) 单文件生成:Hello ...

  4. 关于ASP.NET或VS2005 搭建三层架构的理解

    最近想学习ASP.NET建网站,关于ASP.NET或VS2005 搭建三层架构的理解,网上摘录了一些资料,对于第(2)点的讲解让我理解印象深刻,如下: (1)为何使用N层架构? 因为每一层都可以在仅仅 ...

  5. 使用T4模板生成POCO类

    为什么叫T4?因为简写为4个T. T4(Text Template Transformation Toolkit)是微软官方在VisualStudio 2008中开始使用的代码生成引擎.在 Visua ...

  6. 【VS外接程序】利用T4模板生成模块代码

    引言 记得第一次做asp.net mvc项目时,可以用model直接生成Html的增删改查页面, 没什么特殊要求都可以不用修改直接用了, 觉得很神奇,效率太高了.后来在做客户端开发时,发现很多模块都是 ...

  7. 使用T4模板生成不同部署环境下的配置文件

    在开发企业级应用的时候,通常会有不同的开发环境,比如有开发环境,测试环境,正式环境,生产环境等.在一份代码部署到不同环境的时候,不同环境的配置文件可能需要根据目标环境不同而不同.比如在开发环境中,数据 ...

  8. CSharpGL(12)用T4模板生成CSSL及其renderer代码

    CSharpGL(12)用T4模板生成CSSL及其renderer代码 2016-08-13 由于CSharpGL一直在更新,现在这个教程已经不适用最新的代码了.CSharpGL源码中包含10多个独立 ...

  9. Visual Studio 2013 EF5实体数据模型 EDMX 使用 T4模板生成后使用 ObjectContext对象

    Visual Studio 2013 EF5实体数据模型 EDMX 使用 T4模板生成后的继承对象为DbContext,以前的熟悉的ObjectContext对象不见了,当然使用ObjectConte ...

随机推荐

  1. java过滤emoji表情(成功率高)

    转载自:http://blog.csdn.net/huangchao064/article/details/53283738 基本能过滤大部分的ios,安卓,微信emoji表情 有很多别的帖子搜出来很 ...

  2. curl 文件上传

    curl_file_create (带路径的文件名 [, 文件mimetype , 上传数据里的文件名] ) ; new cURLFile (带路径的文件名 [, 文件mimetype , 上传数据里 ...

  3. QT5入门之23 -QT串口编程(转)

    QT5入门之23 -QT串口编程   QT5有专门的串口类: QSerialPort:提供访问串口的功能 QSerialPortInfo:提供系统中存在的串口的信息 具体使用方法: 1.在pro文件中 ...

  4. idea springboot热部署无效问题

    Intellij IDEA 使用Spring-boot-devTools无效解决办法 springboot项目中遇到的bug <dependencies> <!--spring bo ...

  5. 仙剑奇侠传 游戏 开发 教程 Xianjian qixia development Game development tutorial

    仙剑奇侠传 开发  游戏 开发 教程 Xianjian qixia development Game development tutorial 作者:韩梦飞沙 Author:han_meng_fei_ ...

  6. BZOJ.2756.[SCOI2012]奇怪的游戏(二分 黑白染色 最大流ISAP)

    题目链接 \(Description\) \(Solution\) 这种题当然要黑白染色.. 两种颜色的格子数可能相同,也可能差1.记\(n1/n2\)为黑/白格子数,\(s1/s2\)为黑/白格子权 ...

  7. Java并发程序设计(七)乐天派:无锁

    无锁 一.概述 无锁是处理并发的一种乐观策略,它会假设对资源的访问是没有冲突的.既然没有冲突自然不需要等待,所以所有的线程都可以在不停顿的状态下执行.那遇到冲突怎么办?接下来请看,无锁绝招“CAS”即 ...

  8. Codeforces Round #513 游记

    Codeforces Round #513 游记 A - Phone Numbers 题目大意: 电话号码是8开头的\(1\)位数字.告诉你\(n(n\le100)\)个数字,每个数字至多使用一次.问 ...

  9. SVN解决本地版本控制与服务器版本冲突问题

    最近经常遇到一个冲突问题,svn服务器已经没有这个文件,本地也没有这个文件,但是你提交代码的时候svn会显示冲突,也就是说本地svn仍然在管理着这个文件. 解决办法:在相应的目录下新建一个名字一样的文 ...

  10. javascript 原生常用api 数组方法大全

     <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...