zoukankan      html  css  js  c++  java
  • T4教程2 T4模版引擎之生成数据库实体类

    T4模版引擎之生成数据库实体类

     

      在通过T4模版引擎之基础入门 对T4有了初步印象后,我们开始实战篇。T4模板引擎可以当做一个代码生成器,代码生成器的职责当然是用来生成代码(这不是废话吗)。而这其中我们使用的最普遍的是根据数据库生成实体类。

      工欲善其事必先利其器,在这之前先来介绍一款T4编辑器T4 Editor,我们可以点击链接去下载然后安装,不过还是推荐大家直接在VS扩展管理器里直接安装来的方便 工具->扩展管理器->联机库 搜索 "T4 Editor",选择第一项 "tangible T4 Editor 2.0 plus modeling tools for VS2010" 进行安装即可,如下图所示:

    安装上T4 Editor后,编辑T4模板是就有代码着色和智能提示了,下图为安装T4 Editor后的代码着色效果,怎么样是不是耳目一新,呵呵

     

     

    接下来开始正式进入我们的主题,从数据库自动生成实体类

    1. 新建一个控制台项目,然后添加T4模板,这里我们起名字为Customers.tt

    2. 修改输出文件扩展名为.cs
      <#@ output extension=".cs" #>
    3. 添加常用的程序集和命名空间引用
      复制代码
      <#@ assembly name="System.Core.dll" #>
      <#@ assembly name="System.Data.dll" #>
      <#@ assembly name="System.Data.DataSetExtensions.dll" #>
      <#@ assembly name="System.Xml.dll" #>
      <#@ import namespace="System" #>
      <#@ import namespace="System.Xml" #>
      <#@ import namespace="System.Linq" #>
      <#@ import namespace="System.Data" #>
      <#@ import namespace="System.Data.SqlClient" #>
      <#@ import namespace="System.Collections.Generic" #>
      <#@ import namespace="System.IO" #>
      复制代码
    4. 添加数据库操作DbHelper引用
      DbHelper.ttinclude
      <#@ include file="$(ProjectDir)DbHelper.ttinclude"  #>

      DbHelper相对比较复杂,把一些常用操作进行了简单封装,因此放到一个单独的文件里面进行引用,可以方便的进行复用,这里DbHelper的后缀名使用ttinclude,这里的后缀名可以随便起,按照微软的建议:用于include的文件尽量不要使用.tt做后缀名

    5. 在页面底部定义一些常用变量,以方便操作
      复制代码
      <#+
          public class config
          {
              public static readonly string ConnectionString="Data Source=(local);Integrated Security=true;Initial Catalog=Northwind;";
              public static readonly string DbDatabase="Northwind";
              public static readonly string TableName="Customers";
          }
      #>
      复制代码

      这里我们把数据库连接串和数据库、表名字定义一下,方便修改和使用

    6. 最后来编写用于实体类生成的代码
      复制代码
      //------------------------------------------------------------------------------
      // <auto-generated>
      //     此代码由T4模板自动生成
      //       生成时间 <#=DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")#> by 懒惰的肥兔
      //     对此文件的更改可能会导致不正确的行为,并且如果
      //     重新生成代码,这些更改将会丢失。
      // </auto-generated>
      //------------------------------------------------------------------------------
      
      using System;
      namespace T4ConsoleApplication.Entities
      {    
      
          public class <#=config.TableName#>
          {
              <# foreach(DbColumn column in DbHelper.GetDbColumns(config.ConnectionString, config.DbDatabase, config.TableName)){#>
      
              /// <summary>
              /// <#=column.Remark#>
              /// </summary>        
              public <#= column.CSharpType#><# if(column.CommonType.IsValueType && column.IsNullable){#>?<#}#> <#=column.ColumnName#> { get; set; }
              <#}#> 
            
          }
      }
      复制代码
    7. 全部完成后我们的Customers.tt文件就编写好了
      Customers.tt

      进行保存后会自动生成Customers.cs文件

      Customers.cs

        至此完整演示了怎样一步步根据数据库生成实体类的操作,是不是很简单,如对语法和操作不理解的地方可以参考T4模版引擎之基础入门,稍微用心研究下,轻松打造属于自己的代码生成器。

      本文简单介绍了基于单个模板生成数据库实体类的示例,离具体实用还有一定的距离,毕竟总不能为每个数据表建一个模板吧,下一篇将揭晓如何通过单个T4模板生成多个文件,以及自动生成整个数据库的所有实体类,敬请期待

      下班了,拍拍屁股走人。。。源码:T4ConsoleApplication.rar 注:此文章属懒惰的肥兔原创

  • 相关阅读:
    JavaScript中的闭包
    SQL 备忘
    SqlServer 2005 升级至SP2过程中出现"身份验证"无法通过的问题
    unable to start debugging on the web server iis does not list an application that matches the launched url
    Freebsd 编译内核
    Freebsd 6.2中关于无线网络的设定
    【Oracle】ORA01219
    【Linux】Windows到Linux的文件复制
    【Web】jar命令行生成jar包
    【Linux】CIFS挂载Windows共享
  • 原文地址:https://www.cnblogs.com/james641/p/4745442.html
Copyright © 2011-2022 走看看