mvc实用架构设计(三)ef-code first(3):使用t4模板生成相似代(2)
27 {
28 _word = word; 29 } 30 } 31 } 32 <#+
33 return this.GenerationEnvironment.ToString(); 34 } 35 }
36 #> 模板类中定义了一个 className 参数,用于接收一个表示要生成的类名的值。所有生成类的代码都以字符串的形式写在重写的 TransformText 方法中。 再定义一个T4模板文件 HelloWorldMulti.tt,用于调用 上面定义的代码模板进行代码文件的生成。 1 <#@ template debug=\ 2 <#@ assembly name=\ 3 <#@ import namespace=\ 4 <#@ import namespace=\ 5 <#@ import namespace=\ 6 <#@ import
namespace=\ 7 <#@ include file=\
8 <#@ include file=\ 9 <#
10 string curPath =
Path.GetDirectoryName(Host.TemplateFile); 11 string destPath = Path.Combine(curPath, \
12 if(!Directory.Exists(destPath)) 13 {
14 Directory.CreateDirectory(destPath); 15 }
16 string[] classNames = new[]{\\
17 foreach(string className in classNames) 18 {
19 HelloWorldTemplate template = new HelloWorldTemplate(className);
20 string fileName = string.Format(@\destPath, className);
21 template.Output.Encoding = Encoding.UTF8; 22 template.RenderToFile(fileName); 23 }
24 #> 以上是整个T4模板的执行方,在执行方中,
要引用所有需要用到的类库文件,命名空间,包含的模板文件等。 最后,文件的生成是调用 T4 Toolbox 的Template基类中定义的 RenderToFile(string filename)方法来生成各个文件的,输入的参数为生成文件的文件全名。在这里,生成将如下所示: outPPath文件夹中生成了 HelloWorld1.cs、HelloWorld2.cs、HelloWorld3.cs 文件,而 HelloWorldMulti.tt 所在文件夹中也会生成一个空的 HelloWorldMulti.cs 类文件。四、生成数据层实体相关相似代码(一) 生成准备 我们的生成代码是完全依赖于业务实体的,所以,需要有一个类来对业务实体的信息进行提取封装。 1 namespace GMF.Component.Tools.T4 2 {
3 /// <summary> 4 /// T4实体模型信息类 5 /// </summary> 6 public class T4ModelInfo 7 {
8 /// <summary> 9 /// 获取 模型所在模块名称 10 /// </summary>
11 public string ModuleName { get; private set; } 12
13 /// <summary> 14 /// 获取 模型名称 15 /// </summary>
16 public string Name { get; private set; } 17
18 /// <summary> 19 /// 获取 模型描述 20 /// </summary>
21 public string Description { get; private set; } 22
23 public IEnumerable<PropertyInfo> Properties { get; private set; } 24
25 public T4ModelInfo(Type modelType) 26 {
27 var @namespace = modelType.Namespace;
28 if (@namespace == null) 29 {
30 return; 31 }
32 var index = @namespace.LastIndexOf('.')
+ 1;
33 ModuleName =
@namespace.Substring(index, @namespace.Length - index);
34 Name = modelType.Name; 35 var descAttributes =
modelType.GetCustomAttributes(typeof(DescriptionAttribute), true);
36 Description = descAttributes.Length == 1 ? ((DescriptionAttribute)descAttributes[0]).Description : Name;
37 Properties = modelType.GetProperties(); 38 } 39 }
40 } 另外,通过模板生成的代码,与我们手写的代码有如下几个区别:手写代码可以自由定义,生成代码是根据模板生成的,必然遵守模板定义的规范。手写代码的修改可以永久保存,生成代码的修改将会在下次生成后丢失,即生成代码不应该进行修改。 基于以上几个区别,我提出如下解决方案,来解决生成代码的修改问题通过模板生成的类应尽量定义为分部类(partial class),在需要进行修改及扩展的时候可以定义另外的同名分部类来进行修改。对于需要外
…… 此处隐藏:644字,全部文档内容请下载后查看。喜欢就下载吧 ……相关推荐:
- [实用模板]第八章:法国“新浪潮”与“左岸派”
- [实用模板]2021年北京上半年临床医学检验技师生物
- [实用模板]SAP GUI 7.10客户端安装配置文档
- [实用模板]2001年临床执业医师资格考试综合笔试试
- [实用模板]36机场工作实用英语词汇总结
- [实用模板](一)社会保险稽核通知书
- [实用模板]安全教育主题班会材料
- [实用模板]濉溪县春季呼吸道传染病防控应急演练方
- [实用模板]长沙房地产市场周报(1.30-2.3)
- [实用模板]六年级数学上册典中点 - 图文
- [实用模板]C程序设计(红皮书)习题官方参考答案
- [实用模板]中国证监会第一届创业板发行审核委员会
- [实用模板]桥梁工程复习题
- [实用模板]2011学而思数学及答案
- [实用模板]初中病句修改专项练习
- [实用模板]监理学习知识1 - 图文
- [实用模板]小机灵杯四年级试题
- [实用模板]国贸专业毕业论文模板
- [实用模板]教育学概论考试练习题-判断题4
- [实用模板]2015届高考英语一轮复习精品资料(译林
- 00Nkmhe_市场营销学工商管理_电子商务_
- 事业单位考试法律常识
- 诚信教育实施方案
- 吉大小天鹅食品安全检测箱方案(高中低
- 房地产销售培训资料
- 高一地理必修1复习提纲
- 新概念英语第二册lesson_1_练习题
- 证券公司内部培训资料
- 小学英语时间介词专项练习
- 新世纪英语专业综合教程(第二版)第1册U
- 【新课标】浙教版最新2018年八年级数学
- 工程建设管理纲要
- 外研版 必修一Module 4 A Social Surve
- Adobe认证考试 AE复习资料
- 基于H.264AVC与AVS标准的帧内预测技术
- 《食品检验机构资质认定管理办法》(质
- ABB变频器培训课件
- (完整版)小学说明文阅读练习题及答案
- 深思洛克(SenseLock) 深思IV,深思4,深
- 弟子规全文带拼音




