将数据注释添加到生成的模型中

在 Entity Framework 5 及更高版本使用的 T4 代码生成策略中,默认情况下不包括数据注释属性。要在每个模型重新生成的特定属性之上包含数据注释,请使用 EDMX 附带的打开模板文件(使用 .tt 扩展名),然后在 UsingDirectives 方法下添加 using 语句,如下所示:

foreach (var entity in typeMapper.GetItemsToGenerate<EntityType>
(itemCollection))
{
    fileManager.StartNewFile(entity.Name + ".cs");
    BeginNamespace(code);
#>
<#=codeStringGenerator.UsingDirectives(inHeader: false)#>
using System.ComponentModel.DataAnnotations;  // --> add this line

例如,假设模板应包含指示主键属性的 KeyAttribute。要在重新生成模型时自动插入 KeyAttribute,请找到包含 codeStringGenerator.Property 的部分代码,如下所示:

var simpleProperties = typeMapper.GetSimpleProperties(entity);
    if (simpleProperties.Any())
    {
        foreach (var edmProperty in simpleProperties)
        {
#>
    <#=codeStringGenerator.Property(edmProperty)#>
<#
        }
    }

然后,插入 if 条件以检查键属性,如下所示:

var simpleProperties = typeMapper.GetSimpleProperties(entity);
    if (simpleProperties.Any())
    {
        foreach (var edmProperty in simpleProperties)
        {
             if (ef.IsKey(edmProperty)) { 
#>    [Key]
<#      } 
#>
    <#=codeStringGenerator.Property(edmProperty)#>
<#
        }
    }

通过应用上述更改,从数据库更新模型后,所有生成的模型类将在其主键属性上具有 KeyAttribute

之前

using System;

public class Example
{
    public int Id { get; set; }
    public string Name { get; set; }
}

using System;
using System.ComponentModel.DataAnnotations;

public class Example
{
    [Key]
    public int Id { get; set; }
    public string Name { get; set; }
}