MVC使用T4模板生成其他類的具體實現(xiàn)學習筆記2
在前篇中我們已經將User類中的代碼做了具體的實現(xiàn),但仍然有多個實體類未實現(xiàn),以后可能還會增加新的數據表,數據表結構也有可能發(fā)生變化,所以我們使用T4模板來完成類的生成,這樣就算數據庫表發(fā)生了改變,也會自動根據改變后的實體對類進行重新生成。
下面是數據訪問層的T4模板文件 Dal.tt
<#@ template language="C#" debug="false" hostspecific="true"#>
<#@ include file="EF.Utility.CS.ttinclude"#><#@
output extension=".cs"#>
<#
CodeGenerationTools code = new CodeGenerationTools(this);
MetadataLoader loader = new MetadataLoader(this);
CodeRegion region = new CodeRegion(this, 1);
MetadataTools ef = new MetadataTools(this);
//EF實體文件在項目中的路徑
string inputFile = @"..\\PMS.Model\\PMS.edmx";
EdmItemCollection ItemCollection = loader.CreateEdmItemCollection(inputFile);
string namespaceName = code.VsNamespaceSuggestion();
EntityFrameworkTemplateFileManager fileManager = EntityFrameworkTemplateFileManager.Create(this);
#>
<#//這里為命名空間部分,手動更改為相應的命名空間 #>
using PMS.IDAL;
using PMS.Model;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace PMS.DAL
{
<#
// Emit Entity Types
foreach (EntityType entity in ItemCollection.GetItems<EntityType>().OrderBy(e => e.Name))
{
//fileManager.StartNewFile(entity.Name + "RepositoryExt.cs");
//BeginNamespace(namespaceName, code);
#>
public partial class <#=entity.Name#>Dal :BaseDal<<#=entity.Name#>>,I<#=entity.Name#>Dal
{
}
<#}#>
}
我們將EF實體文件路徑、命名空間更改為對應的值時,Ctrl+S保存,即可生成對應的其他類型的數據訪問類
其他層中也大同小異,只需要做對應的更改即可,下面我將提供相應的代碼
IDAL層
IDal.tt
<#@ template language="C#" debug="false" hostspecific="true"#>
<#@ include file="EF.Utility.CS.ttinclude"#><#@
output extension=".cs"#>
<#
CodeGenerationTools code = new CodeGenerationTools(this);
MetadataLoader loader = new MetadataLoader(this);
CodeRegion region = new CodeRegion(this, 1);
MetadataTools ef = new MetadataTools(this);
string inputFile = @"..\\PMS.Model\\PMS.edmx";
EdmItemCollection ItemCollection = loader.CreateEdmItemCollection(inputFile);
string namespaceName = code.VsNamespaceSuggestion();
EntityFrameworkTemplateFileManager fileManager = EntityFrameworkTemplateFileManager.Create(this);
#>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using PMS.Model;
namespace PMS.IDAL
{
<#
// Emit Entity Types
foreach (EntityType entity in ItemCollection.GetItems<EntityType>().OrderBy(e => e.Name))
{
//fileManager.StartNewFile(entity.Name + "RepositoryExt.cs");
//BeginNamespace(namespaceName, code);
#>
public partial interface I<#=entity.Name#>Dal :IBaseDal<<#=entity.Name#>>
{
}
<#}#>
}
IDbSession.tt
<#@ template language="C#" debug="false" hostspecific="true"#>
<#@ include file="EF.Utility.CS.ttinclude"#><#@
output extension=".cs"#>
<#
CodeGenerationTools code = new CodeGenerationTools(this);
MetadataLoader loader = new MetadataLoader(this);
CodeRegion region = new CodeRegion(this, 1);
MetadataTools ef = new MetadataTools(this);
string inputFile = @"..\\PMS.Model\\PMS.edmx";
EdmItemCollection ItemCollection = loader.CreateEdmItemCollection(inputFile);
string namespaceName = code.VsNamespaceSuggestion();
EntityFrameworkTemplateFileManager fileManager = EntityFrameworkTemplateFileManager.Create(this);
#>
using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace PMS.IDAL
{
public partial interface IDbSession
{
<#
// Emit Entity Types
foreach (EntityType entity in ItemCollection.GetItems<EntityType>().OrderBy(e => e.Name))
{
//fileManager.StartNewFile(entity.Name + "RepositoryExt.cs");
//BeginNamespace(namespaceName, code);
#>
I<#=entity.Name#>Dal <#=entity.Name#>Dal{get;set;}
<#}#>
}
}
DALFactory層
SimpleDalFactory.tt
<#@ template language="C#" debug="false" hostspecific="true"#>
<#@ include file="EF.Utility.CS.ttinclude"#><#@
output extension=".cs"#>
<#
CodeGenerationTools code = new CodeGenerationTools(this);
MetadataLoader loader = new MetadataLoader(this);
CodeRegion region = new CodeRegion(this, 1);
MetadataTools ef = new MetadataTools(this);
string inputFile =@"..\\PMS.Model\\PMS.edmx";
EdmItemCollection ItemCollection = loader.CreateEdmItemCollection(inputFile);
string namespaceName = code.VsNamespaceSuggestion();
EntityFrameworkTemplateFileManager fileManager = EntityFrameworkTemplateFileManager.Create(this);
#>
using SW.OA.IDAL;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
namespace SW.OA.DALFactory
{
public partial class AbstractFactory
{
<#
foreach (EntityType entity in ItemCollection.GetItems<EntityType>().OrderBy(e => e.Name))
{
#>
public static I<#=entity.Name#>Dal Create<#=entity.Name#>Dal()
{
string fullClassName = NameSpace + ".<#=entity.Name#>Dal";
return CreateInstance(fullClassName) as I<#=entity.Name#>Dal;
}
<#}#>
}
}
DbSession.tt
<#@ template language="C#" debug="false" hostspecific="true"#>
<#@ include file="EF.Utility.CS.ttinclude"#><#@
output extension=".cs"#>
<#
CodeGenerationTools code = new CodeGenerationTools(this);
MetadataLoader loader = new MetadataLoader(this);
CodeRegion region = new CodeRegion(this, 1);
MetadataTools ef = new MetadataTools(this);
string inputFile = @"..\\PMS.Model\\PMS.edmx";
EdmItemCollection ItemCollection = loader.CreateEdmItemCollection(inputFile);
string namespaceName = code.VsNamespaceSuggestion();
EntityFrameworkTemplateFileManager fileManager = EntityFrameworkTemplateFileManager.Create(this);
#>
using PMS.DAL;
using PMS.IDAL;
using PMS.Model;
using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace PMS.DALFactory
{
public partial class DBSession : IDBSession
{
<#
// Emit Entity Types
foreach (EntityType entity in ItemCollection.GetItems<EntityType>().OrderBy(e => e.Name))
{
//fileManager.StartNewFile(entity.Name + "RepositoryExt.cs");
//BeginNamespace(namespaceName, code);
#>
private I<#=entity.Name#>Dal _<#=entity.Name#>Dal;
public I<#=entity.Name#>Dal <#=entity.Name#>Dal
{
get
{
if(_<#=entity.Name#>Dal == null)
{
_<#=entity.Name#>Dal = AbstractFactory.Create<#=entity.Name#>Dal();
}
return _<#=entity.Name#>Dal;
}
set { _<#=entity.Name#>Dal = value; }
}
<#}#>
}
}
BLL層
Service.tt
<#@ template language="C#" debug="false" hostspecific="true"#>
<#@ include file="EF.Utility.CS.ttinclude"#><#@
output extension=".cs"#>
<#
CodeGenerationTools code = new CodeGenerationTools(this);
MetadataLoader loader = new MetadataLoader(this);
CodeRegion region = new CodeRegion(this, 1);
MetadataTools ef = new MetadataTools(this);
string inputFile = @"..\\PMS.Model\\PMS.edmx";
EdmItemCollection ItemCollection = loader.CreateEdmItemCollection(inputFile);
string namespaceName = code.VsNamespaceSuggestion();
EntityFrameworkTemplateFileManager fileManager = EntityFrameworkTemplateFileManager.Create(this);
#>
using PMS.IBLL;
using PMS.Model;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace PMS.BLL
{
<#
// Emit Entity Types
foreach (EntityType entity in ItemCollection.GetItems<EntityType>().OrderBy(e => e.Name))
{
//fileManager.StartNewFile(entity.Name + "RepositoryExt.cs");
//BeginNamespace(namespaceName, code);
#>
public partial class <#=entity.Name#>Service :BaseService<<#=entity.Name#>>,I<#=entity.Name#>Service
{
public override void SetCurrentDal()
{
CurrentDal = this.CurrentDbSession.<#=entity.Name#>Dal;
}
}
<#}#>
}
BLL層
IService.tt
<#@ template language="C#" debug="false" hostspecific="true"#>
<#@ include file="EF.Utility.CS.ttinclude"#><#@
output extension=".cs"#>
<#
CodeGenerationTools code = new CodeGenerationTools(this);
MetadataLoader loader = new MetadataLoader(this);
CodeRegion region = new CodeRegion(this, 1);
MetadataTools ef = new MetadataTools(this);
string inputFile = @"..\\PMS.Model\\PMS.edmx";
EdmItemCollection ItemCollection = loader.CreateEdmItemCollection(inputFile);
string namespaceName = code.VsNamespaceSuggestion();
EntityFrameworkTemplateFileManager fileManager = EntityFrameworkTemplateFileManager.Create(this);
#>
using PMS.Model;
using PMS.Model.Search;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace PMS.IBLL
{
<#
// Emit Entity Types
foreach (EntityType entity in ItemCollection.GetItems<EntityType>().OrderBy(e => e.Name))
{
//fileManager.StartNewFile(entity.Name + "RepositoryExt.cs");
//BeginNamespace(namespaceName, code);
#>
public partial interface I<#=entity.Name#>Service : IBaseService<<#=entity.Name#>>
{
}
<#}#>
}
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
微信公眾平臺開發(fā)之認證"成為開發(fā)者".Net代碼解析
這篇文章主要為大家詳細解析了微信公眾平臺開發(fā)之認證"成為開發(fā)者".Net代碼,感興趣的小伙伴們可以參考一下2016-06-06
ASP.NET MVC中使用jQuery時的瀏覽器緩存問題詳解
這篇文章主要介紹了ASP.NET MVC中使用jQuery時的瀏覽器緩存問題詳解,需要的朋友可以參考下。2016-06-06
C#實現(xiàn)上傳照片到物理路徑,并且將地址保存到數據庫的小例子
這篇文章主要介紹了c#上傳圖片,并將地址保存到數據庫中的簡單實例,有需要的朋友可以參考一下2013-12-12
asp.net MVC使用PagedList.MVC實現(xiàn)分頁效果
這篇文章主要為大家詳細介紹了asp.net MVC使用PagedList.MVC實現(xiàn)分頁效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-07-07

