这讲适合所有的MVC程序
很荣幸,我们的系统有了体验的地址了。演示地址
之前我们发布了一个简单的代码生成器,其原理就是读取数据库的表结构,生成文本的一个方式来生成代码!
为了替代重复的劳动,微软自己有一套T4模版,我不想把T4模版说得那么的复杂,因为这个复杂我自己也不知道。
原理跟市面的代码生成器一个道理,但是T4的扩展比代码生成器更灵活,可以更方便根据类生成代码等操作。
T4代码模式是没有颜色高亮了,但是我们的VS支持插件T4
Editor
下载安装之后就可以跟我们写C#一样有智能高亮和提示了。
新建一个项目,专门用于T4的存放。
首先我们要让T4连接我们的数据库
新建一个DbHelper.ttinclude模版包含文件
DbHelper.ttinclude
这里面包含了一些转换的方法和访问数据库的SQL语句
其中GetDbTables方法就是根据数据库的链接,表名来读取字段数据
怎么用呢?就是让模版包含这个文件,就可以访问方法了
举一个Model为例吧,新建Model文件夹。并新建文件,模版文件为tt结尾的扩展
我们新建Test.tt之后
<#@ 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=".txt" #>
最后一行<#@ output extension=".txt" #>
为模版生成的文件,可以是.cs可以是其他。我们就不改了,就是txt
如果是cs类,生成会编译,如果代码是对的,但是系统不知道是对的,会编译出错,虽然这不影响结果,但是不爽
我们为Test.tt添加如下代码
<#@ template debug="false" hostspecific="false" language="C#" #>
<#@ output extension=".txt" #>
<#@ 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" #>
<#@ include file="$(ProjectDir)DbHelper.ttinclude" #>
//------------------------------------------------------------------------------
// <auto-generated>
// 此代码由T4模板自动生成
// 生成时间 <#=DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")#> by YmNets
// 对此文件的更改可能会导致不正确的行为,并且如果
// 重新生成代码,这些更改将会丢失。
// </auto-generated>
//------------------------------------------------------------------------------
我们引入了一些命名空间,因为我们要将读到的表结构进行一系列的处理,比如for循环等操作
其中<#@ include file="$(ProjectDir)DbHelper.ttinclude" #>就是包含了刚刚简历的访问数据库文件
T4模版的语法通过上面我们可以看出是<#@#>,<#=#>,<##>,<#+#>结构跟原生的asp.net一个鸟样,不是Razor语法,这里要注意
我们添加一些代码
<#@ template debug="false" hostspecific="false" language="C#" #>
<#@ output extension=".txt" #>
<#@ 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" #>
<#@ include file="$(ProjectDir)DbHelper.ttinclude" #>
//------------------------------------------------------------------------------
// <auto-generated>
// 此代码由T4模板自动生成
// 生成时间 <#=DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")#> by YmNets
// 对此文件的更改可能会导致不正确的行为,并且如果
// 重新生成代码,这些更改将会丢失。
// </auto-generated>
//------------------------------------------------------------------------------
using System;
using System.ComponentModel.DataAnnotations;
namespace <#=config.nameSpace#>
{
public class <#=config.TableName#>Model
{
<# foreach(DbColumn column in DbHelper.GetDbColumns(config.ConnectionString, config.DbDatabase, config.TableName)){#>
public <#= column.CSharpType#><# if(column.CommonType.IsValueType && column.IsNullable){#>?<#}#> <#=column.ColumnName#> { get; set; }
<#}#>
}
}
<#+
public class config
{
public static readonly string ConnectionString="Data Source=(local);Initial Catalog=AppDB;User ID=sa;Password=zhaoyun123!@#;";
public static readonly string DbDatabase="AppDB";
public static readonly string TableName="SysSample";
public static readonly string nameSpace="App.Sys";
}
#>
有一些通用的我建了一个类config,访问config只需要config.TableName即可
访问DbHelper.ttinclude,值需要DbHelper.***即可
所以同道理,通用的类我们可以建造 Common.ttinclude来完善模版生成库
OK。配置好之后,值需要展开Test.tt就可以看到Test.txt文件,文件生成情况如下
//------------------------------------------------------------------------------
// <auto-generated>
// 此代码由T4模板自动生成
// 生成时间 2014-03-03 17:34:45 by YmNets
// 对此文件的更改可能会导致不正确的行为,并且如果
// 重新生成代码,这些更改将会丢失。
// </auto-generated>
//------------------------------------------------------------------------------
using System;
using System.ComponentModel.DataAnnotations;
namespace App.Sys
{
public class SysSampleModel
{
public string Id { get; set; }
public string Name { get; set; }
public int? Age { get; set; }
public DateTime? Bir { get; set; }
public string Photo { get; set; }
public string Note { get; set; }
public DateTime? CreateTime { get; set; }
}
}
非常快速,所以,你可以很快建立自己项目的模版文件了。
以上只是基础,我们更加关心的是更多的扩展,比如判断数据库类型啊等等,做逻辑处理,获取字段的长度做处理啊。
所以我给大家提供一个备注:下面这条语句可以得到表的结构
<# foreach(DbColumn column in DbHelper.GetDbColumns(config.ConnectionString, config.DbDatabase, config.TableName)){#>
<#}#>
其中:
column.CSharpType 字段的类型
column.IsNullable 是否为空
column.IsPrimaryKey 是否是主键
column.CharLength 字段的长度,如varchar(50)那么column.CharLength=50
column.ColumnName 字段的名称
样例:判断是否DataTime类型
<#if(column.CSharpType=="DateTime"){#>
<# } #>
一个小小的例子,我们就能看懂MVC的T4模版,并能熟练运用它
分享到:
相关推荐
ASP.NET MVC5+EF6+EasyUI 1.4.3+Unity4.x注入的后台管理系统
1. ASP.NET MVC 基础 为什么选择MVC,假如您是个有梦想的人,那么你也应该喜欢极致的东西,而不顾一切付出 表现层的性能可以优化到极致 强迫学习前端语言html以及css、JavaScript 关注点分离 原生态url routing,...
一套漂亮的.net平台管理系统,主要使用的asp.net mv5 + EF6 +easyui,版本未知,好像有点久了
管理系统是一种通过计算机技术实现的用于组织、监控和控制各种活动的软件系统。这些系统通常被设计用来提高效率、减少错误、加强安全性,同时提供数据和信息支持。以下是一些常见类型的管理系统: 学校管理系统: ...
ASP.NET MVC5+EF6后台管理系统 快速开发框架源码 带工作流,带部署文档+数据字典 ASP.NET MVC5、EF6、IOC容器依赖注入、EasyUI、分层分模块、基于接口 开发工具: vs2015+sqlserver2008R2
ASP.NET MVC5+EF6+EasyUI
MVC5+EF6+EasyUI后台管理系统源码+文档,可运行,开源的,大家可以用到自己的项目
ASP.NET+MVC5+EF6+EasyUI源码(完整版),包含数据库。
ASP.NET MVC5+EasyUI企业开发框架源码 ASP.NET MVC5+EasyUI企业开发框架源码
007-ASP.NET MVC5+EasyUI企业开发框架源码
ASP.NET+MVC5+ EF6+ EasyUI 完整项目源码,包含数据库,部署到本机就可以运行。初选者和进阶的学习资料
asp.net+Web+mvc4.0 EasyUI 最新 权限管理系统源码教程asp.net+Web+mvc4.0 EasyUI 最新 权限管理系统源码教程
计算机毕设源码
该项目是一款B/S端框架的项目,采用ASP.NET MVC+EF+EasyUI等技术来实现,分为评价管理、考评管理、考核结果查询、系统管理等五个模块,该系统可以实现对部门的评分、项目的考核、安全信息的管理,软件界面美观,容易...
Asp.Net MVC4 + Oracle + EasyUI + Bootstrap 第一章 --操作数据 1、 关于HtmlHelper和UrlHelper 因为大部分的web请求的目标都是向客户端发送HTML代码。因此,Asp.Net MVC也是 为我们创建HTML提供了各种帮助。...
基于ASP.NET MVC4+JQuery easyui的企业管理系统开发案例源码,采用MVC4.0+三层+JQuery EasyUI开发,很适合初学者学习!
ASP.NET MVC5+EF6后台管理系统 Ymnets快速开发框架源码 带工作流,带部署文档+数据字典,ASP.NET MVC5、EF6、IOC容器依赖注入、EasyUI、分层分模块、基于接口
ASP.NET MVC+EF+EasyUI权限管理源码
C# asp.net MVC + easyUI + EF 科研管理系统源码 内含 设计文档,需求分析,数据库说明。