将数据注释添加到生成的模型中
在 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; }
}