t4b代码生成_Ef+T4模板实现代码快速生成器

效果如图,demo(点击demo可下载案例)

项目结构如图

T4BLL添加BLL.tt文件;

T4Model添加Model文件;

T4DAL添加DAL.tt文件;

T4DAL 添加ADO.NET Entity Data Model选择dababase first 模式;

打开Model1.edmx文件下的Model1.tt打开,复制内容替换了T4Model项目下Model.tt文件;

打开Model1.edmx文件下的Model.tt从{ 开始选择至 }

如下图

复制Model1.tt内容替换BLL.tt、DAL.tt内容,现在Model1.tt已经没有什么意义了,可以删除。

打开T4Model的T4模板,修改如下代码,修改完成后保存下就可以生成出Edmx中添加类的Model。

const string inputFile = @"Model1.edmx";

//更改为

string inputFile = Host.ResolveAssemblyReference("$(ProjectDir)").Replace("T4Model","T4DAL")+"/Model1.edmx";

打开T4DAL的T4模板

fileManager.StartNewFile(entity.Name + ".cs");

//更改为

fileManager.StartNewFile(entity.Name + "_DAL.cs");

//---分割线---

public string EntityClassOpening(EntityType entity)

{

return string.Format(

CultureInfo.InvariantCulture,

"{0} {1}partial class {2}{3}",

Accessibility.ForType(entity),

_code.SpaceAfter(_code.AbstractOption(entity)),

_code.Escape(entity),

_code.StringBefore(" : ", _typeMapper.GetTypeName(entity.BaseType)));

}

//更改为

public string EntityClassOpening(EntityType entity)

{

return string.Format(

CultureInfo.InvariantCulture,

"{0} {1}partial class {2}_DAL{3}",

Accessibility.ForType(entity),

_code.SpaceAfter(_code.AbstractOption(entity)),

_code.Escape(entity),

_code.StringBefore(" : ", _typeMapper.GetTypeName(entity.BaseType)));

}

//---分割线---更改为

foreach (var entity in typeMapper.GetItemsToGenerate(itemCollection))

{

fileManager.StartNewFile(entity.Name + "_DAL.cs");

BeginNamespace(code);

#>

using T4Model;

{

///

/// 新增

///

///

///

public Add( entity){

//内容实现

return null;

}

}

EndNamespace(code);

}

打开T4BLL的T4模板

const string inputFile = @"Model1.edmx";

//更改为

string inputFile = Host.ResolveAssemblyReference("$(ProjectDir)").Replace("T4BLL","T4DAL")+"/Model1.edmx";

//---分割线---

fileManager.StartNewFile(entity.Name + ".cs");

//更改为

fileManager.StartNewFile(entity.Name + "_BLL.cs");

//---分割线---

public string EntityClassOpening(EntityType entity)

{

return string.Format(

CultureInfo.InvariantCulture,

"{0} {1}partial class {2}{3}",

Accessibility.ForType(entity),

_code.SpaceAfter(_code.AbstractOption(entity)),

_code.Escape(entity),

_code.StringBefore(" : ", _typeMapper.GetTypeName(entity.BaseType)));

}

//更改为

public string EntityClassOpening(EntityType entity)

{

return string.Format(

CultureInfo.InvariantCulture,

"{0} {1}partial class {2}_BLL{3}",

Accessibility.ForType(entity),

_code.SpaceAfter(_code.AbstractOption(entity)),

_code.Escape(entity),

_code.StringBefore(" : ", _typeMapper.GetTypeName(entity.BaseType)));

}

//---分割线---更为

foreach (var entity in typeMapper.GetItemsToGenerate(itemCollection))

{

fileManager.StartNewFile(entity.Name + "_BLL.cs");

BeginNamespace(code);

#>

using T4DAL;

using T4Model;

{

_DAL dal = new _DAL();

///

/// 新增

///

///

///

public Add( entity){

return dal.Add(entity);

}

}

EndNamespace(code);

}

Host.ResolveAssemblyReference("$(ProjectDir)")是获取项目路径的方法,通过替换项目名称来寻找到edmx文件,从而实现T4模板分离在不同的类库中。

使用T4模板生成代码的学习

之前做项目使用的都是Db First,直接在项目中添加Entity Framework,使用T4模板(T4模板引擎之基础入门)生成DAL BLL层等(T4模板是一个同事给的,也没有仔细研究,代码如下: ...

T4模板生成代码。 数据实体层与数据仓储层。备注

文件生成模板:TempleteManager.ttinclude

通过T4模板实现代码自动生成

1:准备.tt模板 using BBFJ.OA.IBLL; using BBFJ.OA.IDAL; using BBFJ.OA.Model; using System; using System.Co ...

EF t4模板将实体与DBContext分离

在用EF DBFirst时,实体类是从数据库自动生成的,与DBContext放在同一个项目中.这样其他项目想引用实体,就会将数据库操作类暴露出来.所以,我们需要将实体分离. 新建项目EFAccess, ...

【转】- 使用T4模板批量生成代码

前言 之前在 “使用T4模板生成代码 - 初探” 文章简单的使用了T4模板的生成功能,但对于一个模板生成多个实例文件,如何实现这个方式呢?无意发现一个解决方案 “MultipleOutputHelpe ...

从零开始编写自己的C#框架(12)——T4模板在逻辑层中的应用(一)(附源码)

对于T4模板很多朋友都不太熟悉,它在项目开发中,会帮我们减轻很大的工作量,提升我们的开发效率,减少出错概率.所以学好T4模板的应用,对于开发人员来说是非常重要的. 园子里对于T4模板的介绍与资料已经太 ...

SqlSugar框架T4模板的使用

一.T4模板说明 1.T4模板是用来生成Model层实体类的 2.文件后缀为.tt 3.需要修改配置主要有:引用的SqlSugar.dll的位置.生成实体类的位置及生成实体类的命名空间 4.T4模板生 ...

解决T4模板的程序集引用的五种方案

在众多.NET应用下的代码生成方案中,比如CodeDOM,BuildProvider, 我觉得T4是最好的一种.关于T4的基本概念和模板结果,可以参考我的文章.如 ...

C# 通过T4自动生成代码

通过T4模板生成代码,运行时实现 关键代码段:Host using Microsoft.VisualStudio.TextTemplating; using System; using System. ...

随机推荐

HDU 2509 Nim博弈变形

1.HDU 2509  2.题意:n堆苹果,两个人轮流,每次从一堆中取连续的多个,至少取一个,最后取光者败. 3.总结:Nim博弈的变形,还是不知道怎么分析,,,,看了大牛的博客. 传送门 首先给出结 ...

iOS百度地图SDK集成详细步骤

1.iOS百度地图下载地址 http://developer.baidu.com/map/index.php?title=iossdk/sdkiosdev-download 根据需要选择不同的版本  ...

Linux安装Memcached服务

环境: CentOS 6.4 libevent-1.4.14b-stable memcached-1.4.21 查看是否安装libevent[root@localhost ~]# rpm -qa |g ...

Ajax技术详解

Ajax技术:Ajax描述了一种主要使用脚本(JS)操纵HTTP的web应用架构,它的主要特点是使用脚本操纵HTTP和web服务器进行数据交换,不会导致页面重载.Ajax的核心是JS的XMLHttpR ...

js 写成类的形式 js 静态变量 js方法 属性 json类

function ClassStudentList() { //[{"Cid":"0d","Students":[{"Sid&qu ...

IOS中对于一些控件的抖动效果

这两天在网上看到一个帖子讨论关于有些app 输入账密时候 错误的话会有抖动效果出现,然后自己琢磨了下如何实现,下面上代码!!! 首先 写一个UIView的分类 #import

纯CSS实现table表头固定(自创备忘)

因为之前约定时候产品没说要表头固定,这次迭代测试突然提出这个需求,而且不知道因为什么未知原因非要这样不可--因为之前用了table标签做表单,而且也没用插件,这下就难了点,找另外一个前端前辈妹子商量了 ...

学习笔记TF042:TF.Learn、分布式Estimator、深度学习Estimator

TF.Learn,TensorFlow重要模块,各种类型深度学习及流行机器学习算法.TensorFlow官方Scikit Flow项目迁移,谷歌员工Illia Polosukhin.唐源发起.Scik ...

【转】web.xml不同版本的头

web.xml v2.3 <?xml version="1.0" encoding="ISO-8859-1"?> ..

Java精选笔记&lowbar;Java API

String类 String类的初始化 String是一个特殊的对象,一旦被初始化,就不会被改变 1.使用字符串常量直接初始化一个String对象 String  s1="abc" ...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值