MVC使用T4模板生成其他类的具体实现学习笔记2

在前篇中我们已经将User类中的代码做了具体的实现,但仍然有多个实体类未实现,以后可能还会增加新的数据表,数据表结构也有可能发生变化,所以我们使用T4模板来完成类的生成,这样就算数据库表发生了改变,也会自动根据改变后的实体对类进行重新生成。

下面是数据访问层的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#>>
  {

  }
<#}#>

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • asp.net下将页面内容导入到word模板中的方法

    1,新建word模版,方法是找需要用程序填充的word文档,在需要输入的地方用"书签"(插入-->书签-->输入id-->ok)标记后保存既可. 2,在word模版上修改安全添加everyone 可读,以防文件无法打开. 3,在工程里添加"引用"找到"Microsoft Word 10.0 Object Library"或"Microsoft Word 11.0 Object Library"点确定. 4,新

  • 使用ASP.NET模板生成HTML静态页面的五种方案

    ASP.NET模版生成HTML静态页面方案1: 复制代码 代码如下: /// < summary> /// 传入URL返回网页的html代码 /// < /summary> /// < param name="Url">URL< /param> /// < returns>< /returns> public static string getUrltoHtml(string Url) { errorMsg = &

  • asp.net TemplateField模板中的Bind方法和Eval方法

    比如我们要取个日期型的数据,在数据库中列名是updated,数值是2008/06/01.但是想2008年06月01日这样显示,我们可以这样来写Bind("updated", "{0:yyyy年MM月dd日}"),Eval也是如此. 2者都能读取数据中的值,并显示.当我们使用编辑更新操作时,Bind能够自动的将修改的值更新到数据库中,并显示出修改后的值.但是用了Eval却只能得到错误画面,新的数据没有更新到数据库中. 从这点看来,Bind方法和Eval方法的区别就是:

  • asp.net(C#)压缩图片,可以指定图片模板高宽

    复制代码 代码如下: //生成缩略图函数 //顺序参数:源图文件流.缩略图存放地址.模版宽.模版高 //注:缩略图大小控制在模版区域内 public static void MakeSmallImg(System.IO.Stream fromFileStream, string fileSaveUrl, System.Double templateWidth, System.Double templateHeight) { //从文件取得图片对象,并使用流中嵌入的颜色管理信息 System.Dr

  • ASP.NET之Excel下载模板、导入、导出操作

    本文介绍了ASP.NET下Excel下载模板.导入.导出操作,供大家参考,具体内容如下 1.下载模板功能 protected void btnDownload_Click(object sender, EventArgs e) { var path = Server.MapPath(("upfiles\\") + "test.xlt"); //upfiles-文件夹 test.xlt-文件 var name = "test.xlt"; try {

  • ASP.NET中实现模板页

    使用过JavaStruts的程序员应该知道,Struts中有一个模板标记,虽然其使用起来比较复杂,但对于有大量页面的程序来说其带来了很多方便.但是,在ASP.NET中并没有现成实现可用,这方面国内讨论的也很少,其实,重写sender方法我们也可以实现类似的功能.下面是我项目中使用的一个基类模板类. 1using System; 2using System.Web.UI; 3 4namespace RepeaterDemo.Web.PageTemplate 5{ 6 /**//// <summar

  • asp.net 按指定模板导出word,pdf实例代码

    复制代码 代码如下: /// <summary>        /// 导出word文件        /// </summary>        /// <param name="templateFile">模板路径</param>        /// <param name="fileNameWord">导出文件名称</param>        /// <param name=&q

  • asp.net使用npoi读取excel模板并导出下载详解

    为什么要使用NPOI导出Excel? 一.解决传统操作Excel遇到的问题: 如果是.NET,需要在服务器端装Office,且及时更新它,以防漏洞,还需要设定权限允许.NET访问COM+,如果在导出过程中出问题可能导致服务器宕机.Excel会把只包含数字的列进行类型转换,本来是文本型的,Excel会将其转成数值型的,比如编号000123会变成123.导出时,如果字段内容以"-"或"="开头,Excel会把它当成公式进行,会报错.Excel会根据Excel文件前8行分

  • asp.net GridView模板列中实现选择行功能

    大部分的功能采用通过模板列实现,为了方便选择和删除使用了它自带的功能和方法,很容易就能实现,没发现有什么大问题:但是在部署到服务器中,发现选择显示的不是文字,而是"select",也没查出是什么原因,后面不得不改为通过模板列实现. 在改为模板列实现时,发现gv_sjy_RowCommand事件里不能通过e.CommandArgument获取行的索引值,只能另想途径了,发现有两种方法可以做到: 第一种: 复制代码 代码如下: <asp:LinkButton ID="btn

  • asp.net GridView控件中模板列CheckBox全选、反选、取消

    复制代码 代码如下: using System; using System.Data; using System.Data.SqlClient; using System.Configuration; using System.Collections; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebC

随机推荐