【问题标题】:Modify T4 template from an ADO.NET Entity Data Model (Entity Framework)从 ADO.NET 实体数据模型(实体框架)修改 T4 模板
【发布时间】:2013-10-10 22:01:12
【问题描述】:

其实我需要的应该很简单。

我想用它们各自的类名对所有生成的类添加一个 XML 注释。
目前,生成的类如下所示:

//------------------------------------------------------------------------------
// <auto-generated>
//    This code was generated from a template.
//
//    Manual changes to this file may cause unexpected behavior in your application.
//    Manual changes to this file will be overwritten if the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------

namespace MyProject.Models
{
    using System;
    using System.Collections.Generic;

    public partial class Foo {
    ...
    }
}

我们的 T4 模板名为 WebEntities.tt,包含在名为 WebEntities.edmx 的实体数据模型中。
修改 WebEntities.tt 并执行“运行自定义工具”后,我希望得到以下结果:

//------------------------------------------------------------------------------
// <auto-generated>
//    This code was generated from a template.
//
//    Manual changes to this file may cause unexpected behavior in your application.
//    Manual changes to this file will be overwritten if the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------

namespace MyProject.Models
{
    using System;
    using System.Collections.Generic;

    /// <summary>
    /// My comments for Foo
    /// </summary>
    public partial class Foo {
        ...
    }
}

但我的问题是看看,在哪里以及如何我可以在模板中添加此更改。
T4 模板是通过创建新的 .edmx 文件生成的。
我看过一些教程,但没有进一步解释这种 T4 模板。

有什么想法吗?

亲切的问候

更新:
我在这篇文章中添加了更多信息并正确更改了标题。
之前,我认为“webEntities.tt”这个名称和“web.config”一样常见,但这是错误的。

【问题讨论】:

  • 这个 WebEntities.tt 是什么?它在互联网上的某个地方可用吗?你能概括一下吗?
  • 它是一个文本模板,用于生成映射到数据库模型的所有类。我们有一个名为“WebEntities.edmx”的 .edmx 文件。它包括名为“WebEntities.tt”的文件,并通过创建 .edmx 文件生成

标签: c# entity-framework-5 t4


【解决方案1】:

如果你想要的只是评论而不是注入任何额外的信息,这很简单。我做类似的事情。

您有两个 .tt 文件。您正在查看的评论部分位于 YourModel.Context.tt 中。您可以简单地将其复制出来并放入 YourModel.tt 并运行自定义工具。

文件的顶部应如下所示

<#@ template language="C#" debug="false" hostspecific="true"#>
<#@ include file="EF.Utility.CS.ttinclude"#><#@ 
 output extension=".cs"#><#

const string inputFile = @"YourModel.edmx";
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);

if (!typeMapper.VerifyCaseInsensitiveTypeUniqueness(typeMapper.GetAllGlobalItems(itemCollection), inputFile))
{
    return string.Empty;
}

#>
//------------------------------------------------------------------------------
// <auto-generated>
// <#=GetResourceString("Template_GeneratedCodeCommentLine1")#>
// 
// <#=GetResourceString("Template_GeneratedCodeCommentLine2")#>
// <#=GetResourceString("Template_GeneratedCodeCommentLine3")#>
// </auto-generated>
//------------------------------------------------------------------------------

<#

更新

如果你想把它放在命名空间下面,你应该把这段代码复制到这里

foreach (var entity in typeMapper.GetItemsToGenerate<EntityType>(itemCollection))
{
    fileManager.StartNewFile(entity.Name + ".cs");
    BeginNamespace(code);
#>
// <Summary>
//    My Comments for <#=entity.Name #>
// </Summary>
//--
<#=codeStringGenerator.UsingDirectives(inHeader: false)#>
<#=codeStringGenerator.EntityClassOpening(entity)#>
{
<#

【讨论】:

  • 是的,我的文件顶部看起来很相似。但是我不想复制一些东西——仔细看看我最后的代码sn-p。我想添加 XML cmets。我的例子是“我的 Foo cmets”。此外,我想将它添加到类名的正上方(就像在代码 sn-p 中一样),而不是命名空间的上方。
  • 是的,这看起来像我正在搜索的部分。我编辑了您的帖子,因为之前,它仍然不包含我提到的 cmets。现在,它还有一个带有 的占位符......我怎样才能为任何生成的类正确执行此操作,以便类名出现在该注释部分?
  • 添加 并记得删除默认的 WriteHeader(codeStringGenerator, fileManager);否则你会有两个评论块:) - 见上面的变化
  • 是的,现在可以使用了 - 谢谢! :) 虽然我还有一个问题:我在哪里可以设置注释块,以便 WriteHeader(codeStringGenerator, fileManager) 分别加载它们?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-03
  • 1970-01-01
  • 2013-01-04
  • 2011-02-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多