用T4生成EF框架下的DAL、IDAL、BLL、IBLL
(一)什么是T4模板?
T4,即4个T开头的英文字母组合:Text Template Transformation Toolkit。
T4文本模板,即一种自定义规则的代码生成器。根据业务模型可生成任何形式的文本文件或供程序调用的字符串。(模型以适合于应用程序域的形式包含信息,并且可以在应用程序的生存期更改)
(二)T4基本结构
T4模板可以分为:指令块、文本块、控制块。
指令块 - 向文本模板化引擎提供关于如何生成转换代码和输出文件的一般指令。
文本块 - 直接复制到输出的内容。
控制块 - 向文本插入可变值并控制文本的条件或重复部件的程序代码,不能在控制块中嵌套控制块。
(三)设计时模板和运行时模板
T4文本模板分为:设计时模板和运行时模板
(四)技巧
快速编写模板:
用T4生成EF框架下的DAL、IDAL、BLL、IBLL 四层为例:
DAL:
<#@ template debug="true" hostspecific="true" language="C#" #>
<#@ template language="C#" debug="false" hostspecific="true"#>
<#@ output extension=".cs" #>
<#@ assembly name="System.Data" #>
<#@ assembly name="D:\hua\code\Hua\Dll\MySql.Data.dll"#> <#@ assembly name="System.Xml" #>
<#@ import namespace="System" #>
<#@ import namespace="System.Xml" #>
<#@ import namespace="System.Data" #>
<#@ import namespace="MySql.Data.MySqlClient" #>
<#@ import namespace="System.Collections.Generic"#>
<#@ Import Namespace="System.Text" #>
<#@ import namespace="System.IO" #>
<#@ Import Namespace="System.Reflection"#>
<#@ include file="../Manager.ttinclude" #> <#
var manager = Manager.Create(Host, GenerationEnvironment);
MySqlConnection con = new MySqlConnection("");
DataTable dt;
MySqlCommand cmd = con.CreateCommand();
cmd.CommandText = "SELECT TABLE_NAME FROM USER_TABLES";
cmd.CommandType = CommandType.Text; MySqlDataAdapter adapter = new MySqlDataAdapter(cmd);
DataSet ds = new DataSet();
adapter.Fill(ds);
dt = ds.Tables[];
List<string> list = new List<string>();
if (dt!=null&&dt.Rows.Count>)
{
for (int i = ; i < dt.Rows.Count; i++)
{
list.Add(dt.Rows[i]["TABLE_NAME"].ToString());
}
}
foreach (var item in list)
{
string tableName=item;
#>
<#
manager.StartNewFile("D_"+tableName+".cs");
#> using Model;
using IDAL;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace DAL
{
public class D_<#=tableName#> : D_Base<<#=tableName#>>,ID_<#=tableName#>
{
}
} <#
// 结束输出文件
manager.EndBlock();
}
// 执行编译
manager.Process(true);
#>
IDAL
<#@ template debug="true" hostspecific="true" language="C#" #>
<#@ template language="C#" debug="false" hostspecific="true"#>
<#@ output extension=".cs" #>
<#@ assembly name="System.Data" #>
<#@ assembly name="D:\hua\code\Hua\Dll\MySql.Data.dll"#> <#@ assembly name="System.Xml" #>
<#@ import namespace="System" #>
<#@ import namespace="System.Xml" #>
<#@ import namespace="System.Data" #>
<#@ import namespace="MySql.Data.MySqlClient" #>
<#@ import namespace="System.Collections.Generic"#>
<#@ Import Namespace="System.Text" #>
<#@ import namespace="System.IO" #>
<#@ Import Namespace="System.Reflection" #>
<#@ include file="../Manager.ttinclude" #> <#
var manager = Manager.Create(Host, GenerationEnvironment);
MySqlConnection con = new MySqlConnection("");
DataTable dt;
MySqlCommand cmd = con.CreateCommand();
cmd.CommandText = "SELECT TABLE_NAME FROM USER_TABLES";
cmd.CommandType = CommandType.Text; MySqlDataAdapter adapter = new MySqlDataAdapter(cmd);
DataSet ds = new DataSet();
adapter.Fill(ds);
dt = ds.Tables[];
List<string> list = new List<string>();
if (dt!=null&&dt.Rows.Count>)
{
for (int i = ; i < dt.Rows.Count; i++)
{
list.Add(dt.Rows[i]["TABLE_NAME"].ToString());
}
}
foreach (var item in list)
{
string tableName=item;
#>
<#
manager.StartNewFile("ID_"+tableName+".cs");
#> using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace IDAL
{
public interface ID_<#=tableName#> : ID_Base<Model.<#=tableName#>>
{
}
} <#
// 结束输出文件
manager.EndBlock();
}
// 执行编译
manager.Process(true);
#>
BLL
<#@ template debug="true" hostspecific="true" language="C#" #>
<#@ template language="C#" debug="false" hostspecific="true"#>
<#@ output extension=".cs" #>
<#@ assembly name="System.Data" #>
<#@ assembly name="D:\hua\code\Hua\Dll\MySql.Data.dll"#> <#@ assembly name="System.Xml" #>
<#@ import namespace="System" #>
<#@ import namespace="System.Xml" #>
<#@ import namespace="System.Data" #>
<#@ import namespace="MySql.Data.MySqlClient" #>
<#@ import namespace="System.Collections.Generic"#>
<#@ Import Namespace="System.Text" #>
<#@ import namespace="System.IO" #>
<#@ Import Namespace="System.Reflection"#>
<#@ include file="../Manager.ttinclude" #> <# var manager = Manager.Create(Host, GenerationEnvironment);
MySqlConnection con = new MySqlConnection("");
DataTable dt;
MySqlCommand cmd = con.CreateCommand();
cmd.CommandText = "SELECT TABLE_NAME FROM USER_TABLES";
cmd.CommandType = CommandType.Text; MySqlDataAdapter adapter = new MySqlDataAdapter(cmd);
DataSet ds = new DataSet();
adapter.Fill(ds);
dt = ds.Tables[];
List<string> list = new List<string>();
if (dt!=null&&dt.Rows.Count>)
{
for (int i = ; i < dt.Rows.Count; i++)
{
list.Add(dt.Rows[i]["TABLE_NAME"].ToString());
}
}
foreach (var item in list)
{
string tableName=item;
#>
<#
manager.StartNewFile("B_"+tableName+".cs");
#>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Model;
using IDAL;
using IBLL;
namespace BLL
{ public class B_<#=tableName#> : B_Base<<#=tableName#>>, IB_<#=tableName#>
{
private ID_<#=tableName#> nowDAL = DALContainer.UnityIOC.Resolve<ID_<#=tableName#>>();
public override void SetDal()
{
Dal = nowDAL;
}
}
} <#
// 结束输出文件
manager.EndBlock();
}
// 执行编译
manager.Process(true);
#>
IBLL
<#@ template debug="true" hostspecific="true" language="C#" #>
<#@ template language="C#" debug="false" hostspecific="true"#>
<#@ output extension=".cs" #>
<#@ assembly name="System.Data" #>
<#@ assembly name="D:\hua\code\Hua\Dll\MySql.Data.dll" #> <#@ assembly name="System.Xml" #>
<#@ import namespace="System" #>
<#@ import namespace="System.Xml" #>
<#@ import namespace="System.Data" #>
<#@ import namespace="MySql.Data.MySqlClient" #>
<#@ import namespace="System.Collections.Generic"#>
<#@ Import Namespace="System.Text" #>
<#@ import namespace="System.IO" #>
<#@ Import Namespace="System.Reflection" #>
<#@ include file="../Manager.ttinclude" #> <#
var manager = Manager.Create(Host, GenerationEnvironment);
MySqlConnection con = new MySqlConnection("");
DataTable dt;
MySqlCommand cmd = con.CreateCommand();
cmd.CommandText = "SELECT TABLE_NAME FROM USER_TABLES";
cmd.CommandType = CommandType.Text; MySqlDataAdapter adapter = new MySqlDataAdapter(cmd);
DataSet ds = new DataSet();
adapter.Fill(ds);
dt = ds.Tables[];
List<string> list = new List<string>();
if (dt!=null&&dt.Rows.Count>)
{
for (int i = ; i < dt.Rows.Count; i++)
{
list.Add(dt.Rows[i]["TABLE_NAME"].ToString());
}
}
foreach (var item in list)
{
string tableName=item;
#>
<#
manager.StartNewFile("IB_"+tableName+".cs");
#>
using Model;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace IBLL
{
public interface IB_<#=tableName#> : IB_Base<<#=tableName#>>
{
} }
<#
// 结束输出文件
manager.EndBlock();
}
// 执行编译
manager.Process(true);
#>
用T4生成EF框架下的DAL、IDAL、BLL、IBLL的更多相关文章
- EF框架下的双表查询
最近想使用ef做一些开发但是遇到了一些小问题就是如何实现多表的查询然后经过查资料终于找出了结果 我们知道ef中表的关系是一对一 一对多 多对多 接下来就讲一下一对一的关系下的栗子 先编写两个表 第 ...
- .NET MVC EF框架数据库连接配置
1:数据库的配置和连接 Web.config <connectionStrings> <add name="SQLConnectionString" connec ...
- ASP.NET MVC+EF框架+EasyUI实现权限管理系列(16)-类库架构扩展以及DLL文件生成修改和用户的简单添加
原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(16)-类库架构扩展以及DLL文件生成修改和用户的简单添加 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇) ...
- ASP.NET MVC+EF框架+EasyUI实现权限管理系列(12)-实现用户异步登录和T4模板
原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(12)-实现用户异步登录和T4模板 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇) (1):框架搭建 ...
- MVC实战之排球计分(六)—— 使用EF框架,创建Controller,生成数据库。
在上篇博客我们写到,此软件的数据库连接我们使用的是EF框架,code first模式下, 通过模型类,在创建controller的时候直接生成数据库,完成数据库的连接,与操作. 在使用EF框架之前,我 ...
- windows下扩展yaf,并生成yaf框架文件
YAF中文文档:http://www.laruence.com/manual/index.html 1 YAF框架是用C开发的,属于PHP的扩展框架: 2 YAF的性能相对于源生PHP,性能只降低不到 ...
- 【EF框架】EF DBFirst 快速生成数据库实体类 Database1.tt
现有如下需求,数据库表快速映射到数据库实体类 VS给出的两个选择都有问题,并不能实现,都是坑啊 EF .x DbContext 生成器 EF .x DbContext 生成器 测试结果如下 生成文件 ...
- ASP.NET MVC+EF框架+EasyUI实现权限管理系列(9)-TT模板的学习
原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(9)-TT模板的学习 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇) (1):框架搭建 (2): ...
- ASP.NET MVC+EF框架+EasyUI实现权限管理系列(10)- VSS源代码管理
原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(10)- VSS源代码管理 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇) (1):框架搭建 ( ...
随机推荐
- DesignPattern系列__09设计模式概述
设计模式介绍 设计模式是程序员在面对同类软件工程设计问题所总结出来的有用的经验,模式不是代码,而是某类问题的通用解决方案, 设计模(Design pattern)代表了最佳的实践.这些解决方案是众多软 ...
- vue学习笔记(二): 添加 element ui 插件
一.加载 ui element vue add element 加载过程及成功结果如下 > vue add element>
- Object-C一日速成——环境搭建
要我说,想要学习一门语言,搭建好相关的环境可以达到事半功倍的效果,那么今天我们就来聊一聊关于在windows系统上搭建Object-C语言编程环境的那些事. 文章目录 一.基于CodeBlocks的O ...
- python基础-并发编程02
并发编程 子进程回收的两种方式 join()让主进程等待子进程结束,并回收子进程资源,主进程再结束并回收资源 from multiprocessing import Process import ti ...
- [日常] 使用TCPDUMP和Ethereal抓包分析HTTP请求中的异常情况
在测试功能的过程中,出现这样一种现象.前端js发起ajax请求后,在浏览器的审查元素网络状态中可以看到status为pending,等15秒以后js会把当前超时的请求取消掉,变成了红色的cancel. ...
- 杂项记录 arm64 的一些特性
函数返回值:arm64 规定了整数型返回值放在 x0 寄存器里 sp(栈空间)字节对齐:该临时变量占用 4字节空间:又因为 arm64 下对于使用 sp 作为地址基址寻址的时候,必须要 16byte- ...
- vue项目关闭eslint校验
[前言] eslint是一个JavaScript的校验插件,通常用来校验语法或代码的书写风格.这篇文章主要介绍了vue项目关闭eslint校验,需要的朋友可以参考下 [主体] 简介eslint esl ...
- pytest-2:allure 的安装、使用
版本对应: python3.4==>allure-pytest2.7.0 python3.6==>allure0pytest2.8.6 环境安装: 1.先安装好对应的python,准备好p ...
- JavaScript 看不见的类型转换
本章是我阅读JavaScript权威指南时着重留意的内容,同时也推荐正在学习前端的小伙伴可以留意一下这本书<JavaScript权威指南> JavaScript可以很灵活的将一种类型的值转 ...
- CentOs篇
Advanced-高级配置.Security-安全.Boot-启动引导: 1.Removable Devices-移动设备 2.Hard Drive-本地硬盘 3.CD-ROM- Drive-光盘 4 ...