C# 使用T4模板读取edmx文件自动生成业务代码
T4文本模板是一种自定义规则的代码生成器。
最近在项目中使用了ADO.NET 实体模型
看到生成的edmx文件中也使用了t4模板读取edmx文件中的数据项来生成实体类:
打开tt文件看到了里面读取edmx文件的核心代码是这几行:
知道了如何读取文件之后,就可以编写自己的模板代码了,比如我的是这样:
<#@ template language="C#" debug="false" hostspecific="true"#> <#@ include file="EF.Utility.CS.ttinclude"#> <#@ output extension=".cs"#> <# CodeGenerationTools code = new CodeGenerationTools(this); MetadataLoader loader = new MetadataLoader(this); CodeRegion region = new CodeRegion(this, 1); MetadataTools ef = new MetadataTools(this); string inputFile = @"Model2.edmx"; EdmItemCollection ItemCollection = loader.CreateEdmItemCollection(inputFile); string namespaceName = code.VsNamespaceSuggestion(); EntityFrameworkTemplateFileManager fileManager = EntityFrameworkTemplateFileManager.Create(this); #> namespace My.IDAL { <# foreach (EntityType entity in ItemCollection.GetItems<EntityType>().OrderBy(e => e.Name)) { #> public partial interface I<#=entity.Name#>Repository :IBaseRepository<<#=entity.Name#>> { } <#}#> }
类似于asp脚本 和 razor视图中遍历实体生成列表的代码 。 我这样写的话就是为每一个数据库表对应的实体都创建一个仓储服务接口的结构定义代码。
最终生成的代码:
这样的话,当新增了数据库表和实体的时候,只要更新ado.net实体数据模型,就可以自动生成相应的服务代码的结构定义代码了。