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

时间:2018-11-11 10:19:21

标签: model-view-controller ef-database-first

我首先使用MVC数据库,并创建了一个.edmx文件。

现在我的所有表格都可以在这个model.tt文件中找到。 我还在表的那些字段上定义了一些数据注释。

但是我注意到,当我尝试更新此模型时,数据注释的值就会失效。

任何想法。

1 个答案:

答案 0 :(得分:1)

是的,您读了多少关于注解的文章有点可笑,但是您实际上不能使用它们,因为它们会被覆盖。

这就是我发现可以帮助我的

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类如下所示:

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

绝对不要编辑它。

相反,您可以在其中创建一个单独的类文件(我叫mine元数据.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; }
    }
}