教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 精品文档 > 实用模板 >

mvc实用架构设计(三)ef-code first(3):使用t4模板生成相似代(2)

来源:网络收集 时间:2026-08-03
导读: 27 { 28 _word = word; 29 } 30 } 31 } 32 #+ 33 return this.GenerationEnvironment.ToString(); 34 } 35 } 36 # 模板类中定义了一个 className 参数,用于接收一个表示要生成的类名的值。所有生成类的代码都以字

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字,全部文档内容请下载后查看。喜欢就下载吧 ……
mvc实用架构设计(三)ef-code first(3):使用t4模板生成相似代(2).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wendang/520000.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)