`
king_tt
  • 浏览: 2153975 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(29)-T4模版

 
阅读更多

这讲适合所有的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模版,并能熟练运用它

作者:YmNets
出处:http://ymnets.cnblogs.com/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
分类:[01].Net
分享到:
评论

相关推荐

    ASP.NET MVC5+EF6+EasyUI 1.4.3+Unity4.x注入的后台管理系统

    综合以上技术,"ASP.NET MVC5+EF6+EasyUI 1.4.3+Unity4.x注入的后台管理系统"是一个采用现代Web开发技术构建的高效、安全且易维护的后台管理解决方案。通过MVC5,开发者可以构建清晰的业务逻辑结构;EF6简化了数据库...

    构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统

    1. ASP.NET MVC 基础 为什么选择MVC,假如您是个有梦想的人,那么你也应该喜欢极致的东西,而不顾一切付出 表现层的性能可以优化到极致 强迫学习前端语言html以及css、JavaScript 关注点分离 原生态url routing,...

    ymnets后台管理系统(ASP.NET MVC5+EF6+easyui)

    【标题】"ymnets后台管理系统"是基于ASP.NET MVC5、Entity Framework 6(EF6)和EasyUI框架开发的一款管理界面。这个系统为.NET平台提供了一个美观且实用的后台解决方案,尤其适用于需要进行数据管理和操作的应用...

    微信后台 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统.zip

    管理系统是一种通过计算机技术实现的用于组织、监控和控制各种活动的软件系统。这些系统通常被设计用来提高效率、减少错误、加强安全性,同时提供数据和信息支持。以下是一些常见类型的管理系统: 学校管理系统: ...

    ASP.NET MVC5+EF6后台管理系统 快速开发框架源码 带工作流

    ASP.NET MVC5+EF6后台管理系统 快速开发框架源码 带工作流,带部署文档+数据字典 ASP.NET MVC5、EF6、IOC容器依赖注入、EasyUI、分层分模块、基于接口 开发工具: vs2015+sqlserver2008R2

    MVC5+EF6+EasyUI后台管理系统源码+文档

    **MVC5、Entity Framework 6 (EF6) 和 EasyUI 概述** MVC5(Model-View-Controller)是Microsoft开发的一款...对于学习和参考MVC5、EF6和EasyUI的开发实践,或者构建自己的后台管理系统,这是一个非常有价值的资源。

    ASP.NET MVC5+EF6+EasyUI

    ASP.NET MVC5、Entity Framework 6(EF6)和EasyUI是开发Web应用程序时常用的三个技术框架。在本文中,我们将深入探讨这三个组件的核心概念、它们如何协同工作以及如何在实际项目中应用。 **ASP.NET MVC5** ASP.NET...

    007-ASP.NET MVC5+EasyUI企业开发框架源码.7z

    007-ASP.NET MVC5+EasyUI企业开发框架源码

    ASP.NET MVC5+EasyUI企业开发框架源码

    ASP.NET MVC5+EasyUI企业开发框架源码是一款基于微软的ASP.NET MVC5技术和EasyUI前端框架构建的企业级应用开发框架。此框架旨在提供高效、稳定且易于维护的解决方案,适用于开发复杂的Web应用程序。下面将详细阐述这...

    毕业设计:ASP.NET MVC5+EF6+EasyUI 后台管理系统(学习).zip

    计算机毕设源码

    基于ASP.NET MVC+EF+EasyUI实现管理系统案列

    该项目是一款B/S端框架的项目,采用ASP.NET MVC+EF+EasyUI等技术来实现,分为评价管理、考评管理、考核结果查询、系统管理等五个模块,该系统可以实现对部门的评分、项目的考核、安全信息的管理,软件界面美观,容易...

    ASP.NET MVC5+EF6+EasyUI 后台管理系统源码

    ASP.NET MVC5、Entity Framework 6(EF6)和EasyUI是开发高效、现代Web应用程序的常用技术栈。本项目源码提供了一个完整的后台管理系统,适用于初学者和有一定经验的开发者进行学习和实践。 首先,ASP.NET MVC5是...

    asp.net+Web+mvc4.0 EasyUI 最新 权限管理系统源码教程

    【标题】"asp.net+Web+mvc4.0 EasyUI 最新 权限管理系统源码教程" 提供的是一款基于ASP.NET技术栈,利用Web和MVC4.0框架,结合EasyUI前端库构建的权限管理系统。这个系统旨在帮助开发者理解和实现用户权限的精细控制...

    ASP.NET+MVC5+EF6+EasyUI源码(完整版)

    ASP.NET、MVC5、Entity Framework 6 (EF6) 和 EasyUI 是现代Web应用程序开发中的四个关键组件,尤其在企业级应用中广泛使用。这个完整的源码包提供了使用这些技术构建的示例项目,有助于开发者理解和学习如何将它们...

    Asp.Net MVC4 + Oracle + EasyUI + Bootstrap 第一章

    Asp.Net MVC4 + Oracle + EasyUI + Bootstrap 第一章 --操作数据 1、 关于HtmlHelper和UrlHelper 因为大部分的web请求的目标都是向客户端发送HTML代码。因此,Asp.Net MVC也是 为我们创建HTML提供了各种帮助。...

    ASP.NET MVC4+EasyUI+三层工厂模式 实现权限管理系统.rar

    ASP.NET MVC4+EasyUI+三层工厂模式 实现权限管理系统 其中Entity为模型实体层类库;DAL为数据访问层类库,主要负责数据库操作;BLL为业务逻辑类库,Common为公共帮助类库,WebUI为用户层。

    asp.net MVC + easyUI + EF 科研管理系统源码

    ASP.NET MVC + EasyUI + EF 科研管理系统源码是一个基于C#开发的高效、功能丰富的科研管理平台。这个系统利用了微软的ASP.NET MVC框架,EasyUI前端框架以及Entity Framework(EF)作为数据访问层,实现了对科研项目...

    ASP.NET MVC+EF+EasyUI权限管理源码

    在现代Web开发领域,ASP.NET MVC框架结合Entity Framework(EF)与EasyUI已经成为构建高效、可维护的企业级权限管理系统的一种常见选择。本文将深入探讨这个主题,分析这些技术如何协同工作以实现强大的功能。 ASP...

    最新版ASP.NET MVC5+EF6后台管理系统 Ymnets快速开发框架源码 带工作流

    综上所述,Ymnets快速开发框架结合了ASP.NET MVC5、EF6、IOC容器、EasyUI和工作流等技术,提供了一个高效、可扩展且易于使用的后台管理系统,是开发企业级应用的理想选择。通过这个框架,开发者可以大大减少重复工作...

    基于ASP.NET MVC4+JQuery easyui的企业管理系统开发案例源码

    【标题】中的知识点主要涉及到的是ASP.NET MVC4框架与JQuery EasyUI的结合应用,用于构建企业管理系统。ASP.NET MVC4是一种模型-视图-控制器(Model-View-Controller)架构模式,它允许开发者分离应用程序的业务逻辑...

Global site tag (gtag.js) - Google Analytics