2013-10-10 151 views
1

實際上,我需要的應該很簡單。從ADO.NET實體數據模型(實體框架)修改T4模板

我想用它們各自的類名對所有生成的類進行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模板。

有什麼想法?

親切的問候

UPDATE:
我增加了一些更多的信息,這篇文章,適當改變標題。
在此之前,我認爲名稱「webEntities.tt」與「web.config」是相同的,但這是錯誤的。

+0

這是什麼WebEntities.tt?它可以在互聯網上的某個地方使用嗎?你能創造一個它的主旨嗎? – Natan

+0

這是一個文本模板,用於生成映射到數據庫模型的所有類。我們有一個名爲「WebEntities.edmx」的.edmx文件。它包含名爲「WebEntities.tt」的文件,並通過創建.edmx文件生成。 –

回答

0

簡單的死了這個,如果你想要的只是註釋而不注入任何額外的信息。我做類似的事情。

您有兩個.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> 
//------------------------------------------------------------------------------ 

<# 

UPDATE

在你的情況,如果你想它只是在命名空間下面你要的這部分代碼,並將其複製在這裏

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)#> 
{ 
<# 
+0

是的,我的文件的頂部看起來很相似。但我不想複製一些內容 - 仔細查看我最後的代碼片段。我想添加XML註釋。我的例子是「我對Foo的評論」。此外,我想將它添加到類名稱上方(如代碼片段中),但不在名稱空間之上。 –

+0

查看更新,這應該是你的期望。 –

+0

是的,這看起來像我正在尋找的部分。我之前編輯過你的帖子,但仍然沒有包含評論。現在,它也有一個佔位符<#EntityName#> ...我如何正確地爲任何生成的類執行此操作,以使類名出現在該註釋部分中? –