如何在 MVC 数据优先方法中保留数据注释

How to preserve dataannotation in MVC data first approach

我正在使用 MVC 数据库优先方法并创建了一个 .edmx 文件。

现在我所有的 table 都可以在这个 model.tt 文件中找到。 我还在 table.

的那些字段上定义了一些数据注释

但我注意到,每当我尝试更新此模型时,dataanotation 的值就会失效。

有什么想法请。

是的,您读了很多关于注释的内容,但您实际上不能使用它们,因为它们会被覆盖,这有点有趣。

这是我找到的对我有帮助的东西

http://www.ozkary.com/2015/01/add-data-annotations-to-entity.html

还有这个

https://docs.microsoft.com/en-us/previous-versions/aspnet/ee256141(v=vs.98)

我不假装理解它,但这里有一个加入点指南。

生成的 EF class 示例如下所示:

public partial class Employee
{
    public int Emp_ID { get; set; }
    public string Emp_Name { get; set; }
    public Nullable<System.DateTime> Commencement_Date { get; set; }
}

绝对不要编辑这个。

相反,您创建了一个单独的 class 文件(我将我的文件命名为 metadata.cs 并将其放在 Models 文件夹中),其中包含以下内容:

using System;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel;

namespace MyProject.Models
{
    [MetadataType(typeof(EmployeeMD))]  // new name for your metadata class
    public partial class Employee    // same name as your EF generated class
    {
    // Nothing in here
    }

    internal sealed class EmployeeMD // your metadata class
    {
    [Required]
    [StringLength(50, MinimumLength = 2, ErrorMessage = "Name required")]
    public string Emp_Name { get; set; }


    [DataType(DataType.Date)]
    [DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
    public Nullable<System.DateTime> Commencement_Date { get; set; }
    }
}