- 1、本文档共42页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
EntityFramework T4模板代码解析
EntityFramework T4模板代码解析一、Model.tt的T4模板///1.1 指令区#@templatelanguage=C#debug=truehostspecific=true##@includefile=EF.Utility.CS.ttinclude##@outputextension=.cs#///1.2 基本参数设置区#conststring inputFile = @DataModel.edmx;////路径设置,如@..\\**.**.Model\\DataModel.edmxvar textTransform = DynamicTextTransformation.Create(this);var code = new CodeGenerationTools(this);///负责帮助创建格式正确和功能正确的源代码var ef = new MetadataTools(this);///包含访问代码生成所需的Entity Framework元数据的帮助方法var typeMapper = new TypeMapper(code, ef, textTransform.Errors);///“控件”管理器varfileManager = EntityFrameworkTemplateFileManager.Create(this); ///负责将生成的代码的各个部分分成单独的文件。写入多个文件的模板使用此类,因为文本模板技术不支持生成多个文件。var itemCollection = new EdmMetadataLoader(textTransform.Host, textTransform.Errors).CreateEdmItemCollection(inputFile);///模型集合,含:C#数据类型、数据库数据类型、以及模型实体、数据类型、关系等等,是模版生成的数据源。MetadataLoader负责从.edmx或.csdl文件中加载EdmItemCollection,StoreItemCollection和StorageMappingItemCollection对象。var codeStringGenerator = new CodeStringGenerator(code, typeMapper, ef);///代码发生器if (!typeMapper.VerifyCaseInsensitiveTypeUniqueness(typeMapper.GetAllGlobalItems(itemCollection), inputFile)){returnstring.Empty;}WriteHeader(codeStringGenerator, fileManager);///1.3 代码文件输出区///1.3.1 实体(类)文件输出foreach (var entity in typeMapper.GetItemsToGenerateEntityType(itemCollection)) ///遍历每个实体表,形成实体类文件{/// 头部 fileManager.StartNewFile(entity.Name + .cs);///设置实体类文件名 BeginNamespace(code);///输出命名空间头##=codeStringGenerator.UsingDirectives(inHeader: false)# ///输出引用项“Using System”#=codeStringGenerator.EntityClassOpening(entity)#///输出类名“[Serializable]\r\npublicabstract partial class **Info:BaseInfo”{///类起始“{”#var propertiesWithDefaultValues = typeMapper.GetPropertiesWithDefaultValues(entity);///获取实体表内的含默认值的简单属性var collectionNavigationProperties = typeMapper.GetCollectionNavigationProperties(entity);///获取实体表内的一对多类导航属性(集合类导航属性)var complexProperties = typeMapper.GetComplexProperties(entity); ///获取实体表内复杂属性if (propertiesWithDefaultValues.Any() || collectionNavigationProperties.Any() || c
文档评论(0)