Entity Framework6 的T4模板
截止于2015年9月,微软最新的ORM框架是Entity Framework6。我们将为EF6框架制作自动代码生成器。
实例:当前业务有十几个实体,需要为每个实体生成业务层的接口,如下所示
1 namespace IBLL 2 { 3 public partial interface IBill_LeaveBLL : IBaseBLL<MODEL.Bill_Leave> 4 { 5 } 6 public partial interface IOu_DepartmentBLL : IBaseBLL<MODEL.Ou_Department> 7 { 8 } 9 public partial interface IOu_PermissionBLL : IBaseBLL<MODEL.Ou_Permission> 10 { 11 } 12 public partial interface IOu_RoleBLL : IBaseBLL<MODEL.Ou_Role> 13 { 14 } 15 public partial interface IOu_RolePermissionBLL : IBaseBLL<MODEL.Ou_RolePermission> 16 { 17 } 18 //omit 1000 Lines~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 19 }
显然,自己用手敲会累死~~~
注意<#@ include file="EF6.Utility.CS.ttinclude"#>指令,我们使用微软为EF6提供的ttinclude工具,来获取EF6 edmx文件的详细信息,下面是T4模板代码:
<#@ template language="C#" debug="false" hostspecific="true"#> <#@ include file="EF6.Utility.CS.ttinclude"#><#@ output extension=".cs"#><# const string inputFile = @"../MODEL/OuOA.edmx"; var textTransform = DynamicTextTransformation.Create(this); var code = new CodeGenerationTools(this); var ef = new MetadataTools(this); var fileManager = EntityFrameworkTemplateFileManager.Create(this); EdmMetadataLoader loader=new EdmMetadataLoader(textTransform.Host, textTransform.Errors); EdmItemCollection itemCollection = (EdmItemCollection)loader.CreateEdmItemCollection(inputFile); //itemCollection.CreateEdmItemCollection(inputFile); #> namespace IBLL { <# foreach(EntityType entity in itemCollection.GetItems<EntityType>().OrderBy(e => e.Name)) { #> public partial interface I<#=entity.Name#>BLL : IBaseBLL<MODEL.<#=entity.Name#>> { } <#}#> } <#+ public static void ArgumentNotNull<T>(T arg, string name) where T : class { if (arg == null) { throw new ArgumentNullException(name); } } #>
注意,与之前版本EF不同的是,必须要添加这个ArgumentNotNull方法(这个方法是用来判断你自己调用的那些方法传递的参数不是空,比如EdmItemCollection itemCollection = (EdmItemCollection)loader.CreateEdmItemCollection(inputFile);ttinclude源码会查看这个参数不是空)。
除此以外与之前的ttinclude稍微有一点区别,比如方法做过了改写等等,使用时要注意。

浙公网安备 33010602011771号