我想在 Matt Mhetton 的回答中添加更多详细信息,因为由于我当前的项目配置(CA 和 Style cop),所有内容都必须记录在案。
一方面,您必须在设计器中为您想要记录的所有内容(类、简单属性、复杂属性和导航属性)添加文档属性
另一方面,您必须打开您创建的 WhatModel.tt 并对其进行编辑以包含文档,我将逐步解释:
1.- 对于类文档,请查找:
<#=codeStringGenerator.UsingDirectives(inHeader: false)#>
<#=codeStringGenerator.EntityClassOpening(entity)#>
(在我的情况下为第 26 行)并将您的 cmets 放在这两行之间,如下所示:
<#=codeStringGenerator.UsingDirectives(inHeader: false)#>
<# if (entity != null && entity.Documentation != null) {#>
/// <summary>
/// <#= entity.Documentation.Summary #>
/// </summary>
<# } #>
<#=codeStringGenerator.EntityClassOpening(entity)#>
2.- 对于 constructor 文档 查找 public <#=code.Escape(entity)#>() thaqt 是生成构造函数的内容,因此请将您的文档放在该行之前,如下所示:
<# if (entity != null && entity.Documentation != null) {#>
/// <summary>
/// <#= entity.Documentation.Summary #>
/// </summary>
<# } #>
public <#=code.Escape(entity)#>()
{
3.- 要记录每个属性,请查找foreach (var edmProperty in simpleProperties),此外观将生成属性代码,因此,它应如下所示:
foreach (var edmProperty in simpleProperties)
{
#>
<# if (edmProperty != null && edmProperty.Documentation != null) {#>
/// <summary>
/// <#= edmProperty.Documentation.Summary #>
/// </summary>
<# } #>
<#=codeStringGenerator.Property(edmProperty)#>
<#
}
(注意:这适用于简单属性,但对于复杂属性将采用相同的方式...)
4.- 对于 导航属性 完全相同,查找 foreach (var navigationProperty in navigationProperties) 并添加您的文档,如下所示:
foreach (var navigationProperty in navigationProperties)
{
#>
<# if (navigationProperty != null && navigationProperty.Documentation != null) {#>
/// <summary>
/// <#= navigationProperty.Documentation.Summary #>
/// </summary>
<# } #>
<#=codeStringGenerator.NavigationProperty(navigationProperty)#>
<#
}
4.- 最后但同样重要的是,如果您还需要 上下文类中的文档,您可以使用它(查找 <# if (code.Escape(container) != null) {#>):
<# if (code.Escape(container) != null) {#>
/// <summary>
/// Represents <#= code.Escape(container) #>
/// </summary>
<# } #>
<#=Accessibility.ForType(container)#> partial class <#=code.Escape(container)#> : DbContext
{
<# if (code.Escape(container) != null) {#>
/// <summary>
/// Initializes a new instance of the <see cref="<#= code.Escape(container) #>"/> class.
/// </summary>
<# } #>
public <#=code.Escape(container)#>()
: base("name=<#=container.Name#>")
{
<#
if (!loader.IsLazyLoadingEnabled(container))
{
#>
this.Configuration.LazyLoadingEnabled = false;
<#
}
#>
}
/// <summary>
/// On Model Creating
/// </summary>
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
throw new UnintentionalCodeFirstException();
}
<#
foreach (var entitySet in container.BaseEntitySets.OfType<EntitySet>())
{
#>
<# if (code.Escape(entitySet) != null) {#>
/// <summary>
/// Gets or sets the <#=code.Escape(entitySet)#>
/// </summary>
<# } #>
我希望它能像马特惠顿的回答一样帮助我(谢谢马特)。