【发布时间】:2014-01-09 20:47:10
【问题描述】:
我正在尝试为一些 EF 6.0 的东西构建一个简单的 C# 模板。我在定义所有实体框架对象的同一个项目中创建了模板。但是,我似乎无法使用在实体生成器中可以找到的某些类型,特别是 TypeMapper。
这是我的实体生成器 T4 文件的顶部:
<#@ template language="C#" debug="false" hostspecific="true"#>
<#@ include file="EF.Utility.CS.ttinclude"#>
<#@ output extension=".cs"#>
<#
const string inputFile = @"EpicCloudDB.edmx";
#>
<#@ include file="EdmxEnumFixer.t4" #>
<#
var textTransform = DynamicTextTransformation.Create(this);
var code = new CodeGenerationTools(this);
var ef = new MetadataTools(this);
var typeMapper = new TypeMapper(code, ef, textTransform.Errors);
var fileManager = EntityFrameworkTemplateFileManager.Create(this);
var itemCollection = new EdmMetadataLoader(textTransform.Host, textTransform.Errors).CreateEdmItemCollection(inputFile);
var codeStringGenerator = new CodeStringGenerator(code, typeMapper, ef);
#>
这里没有什么疯狂的事情。但是,如果我创建一个模板并将其直接粘贴到其中(同一个项目),它将无法找到以下类型:
- 类型映射器
- 代码字符串生成器
- EdmMetadataLoader
我只需要 TypeMapper,但我不明白为什么相同的模板代码在新模板中不起作用,但在默认 EF 文件中运行良好。
这些类都不容易找到相关文档。我想如果我能找到定义 TypeMapper 的程序集,我可以手动添加引用,然后再担心一般的怪异,但事实证明这比我预期的要困难。
那么我怎样才能将这种类型导入到我的模板中呢?在这里等待答案时,我将通过 EF 6 源进行 grep。
【问题讨论】:
-
您没有查看 EF.Utility.CS.ttinclude?应该在那里定义。
-
@Will:我做到了,不是。如果它们是代码将起作用。就像我说的那样,您可以将上面在 EF 实体生成器中工作的完全相同的模板代码复制到一个新模板中,但它会失败。
-
@Will: Here is the definition
-
是的,正在偷看。里面什么都没有。怪异的...
-
@Will:我知道,这对我来说毫无意义。愚蠢的东西总是花费最多的时间......
标签: .net entity-framework t4