用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):框架搭建 ( ...
随机推荐
- DevExpress的TreeList实现自定义右键菜单打开文件选择对话框
场景 DevExpress的TreeList实现节点上添加自定义右键菜单并实现删除节点功能: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/det ...
- 第三方库Mantle的源码解析
Mantle是一个用于简化Cocoa或Cocoa Touch程序中model层的第三方库.通常我们的应该中都会定义大量的model来表示各种数据结构,而这些model的初始化和编码解码都需要写大量的代 ...
- Python函数使用
Python函数用def指定函数名,可以指定输入参数,可以指定参数的默认值,也可以用return指定返回值.调用时除了默认的位置赋值,也可按关键字赋值. 一.函数不带参数.没有返回值 def hell ...
- PHP代码篇(五)--如何将图片文件上传到另外一台服务上
说,我有一个需求,就是一个临时功能.由于工作开发问题,我们有一个B项目,需要有一个商品添加的功能,涉及到添加商品内容,比如商品名字,商品描述,商品库存,商品图片等.后台商品添加的接口已经写完了,但是问 ...
- FOLDER
一.建noTab的Folder Form:1.创建数据库对象: create table 和相应的view. 2.基于模板Template.fmb创建一个新的Form:****.fmb 添加一个 ...
- Django 的admin
admin使用 Django 自动管理工具是 django.contrib 的一部分.你可以在项目的 settings.py 中的 INSTALLED_APPS 看到它: # Application ...
- C++学习一 结构与结构体
结构体属于C++与C区别之一. 代码例子如下(来自<C++程序设计>): #include <iostream> #include <string> using n ...
- (转)新建maven项目时报错Error:Maven Resources Compiler: Maven project configuration required for module 'XX'解决方法
转载地址:https://blog.csdn.net/qq784515681/article/details/85070195 在新建maven项目时,Problems中报错: Error:Maven ...
- 电商网站名词item-->SKU与SPU
一.总述: item sku spuitem 代表一种商品,是和店铺关联的.sku 商品的库存量单位 , 代表商品的规格和属性spu 产品单位最小分割的商品 ,与商家无关 它的属性会影响价格. 简单的 ...
- git报错_you are not allowed to push code to protected branches on this project
问题描述 今天在提交代码的时候,由于使用的是新库,写完代码后,进行push,发现报错 you are not allowed to push code to protected branches on ...