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>
        /// Email
        /// </summary>
        public string Email { get; set; }

        /// <summary>
        /// 手機號
        /// </summary>
        public string Mobile { get; set; }
    }
}
View Code

輸入完成后保存就會自動生成一個類文件

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM