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模板——三層重新生成完成