从 ADO.NET 实体数据模型(实体框架)修改 T4 模板
本文关键字:实体 修改 T4 模板 框架 ADO NET 数据模型 | 更新日期: 2023-09-27 18:34:41
实际上,我需要的应该很简单。
我想在所有生成的类上放置一个 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"一样常见,但这是错误的。
如果您只想发表评论而不注入任何其他信息,那就很简单了。 我做类似的事情。
您有两个 .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)#>
{
<#