如何自动将数据注释添加到生成的实体?

时间:2019-05-29 11:19:04

标签: c# entity-framework ef-database-first

我有一堆从数据库连接自动生成的实体类。我想自动添加数据注释,例如,如果某列的类型为varchar(100),那么我想使用数据注释[StringLength(100)],或者如果它不是可为空的字段,我会d希望使用[Required]注释。这可能吗?

我发现的关于这个is almost 10 years old的唯一问题和当时的答案不再有效。

在此先感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

经过一些研究和反复试验,我设法做到了。基本上,它涉及编辑由Entity Framework生成的T4模板。

添加ADO.NET Entity Data Model> EF Designer from data...之后,您将获得一个EDMX文件,如果在Visual Studio上将其展开,则将存在一个与.edmx文件同名的.tt文件。

在该文件上,我在<#=codeStringGenerator.UsingDirectives(inHeader: false)#>语句的using下添加了数据注释:

using System.ComponentModel.DataAnnotations;

然后,在simpleProperties声明之后的几行中,在foreach中,我添加了以下内容:

foreach (var edmProperty in simpleProperties) // <-- Original foreach statement
        {
            if(edmProperty.Nullable == false)
            {
            #>    [Required]
<#
            }
            if(edmProperty.MaxLength != null)
            {
            #>    [StringLength(<#=edmProperty.MaxLength#>)]
<#
            }
//Rest of the auto-generated code...

保存此文件将相应地更新自动生成的.cs文件:

namespace MyNamespace
{
    using System;
    using System.Collections.Generic;

    using System.ComponentModel.DataAnnotations;

    public partial class MyModel
    {
        [Required]
        public int Id { get; set; }
        [Required]
        [StringLength(20)]
        public string MyField { get; set; }
    }
}