ASP.NET MVC实体框架:数据注释

时间:2016-09-23 01:59:59

标签: asp.net-mvc entity-framework-4 entity-framework-6

我正在使用数据库优先方法处理Entity Framework。我已经在我的应用程序中定义了模型。现在我正在使用控制器和视图。我使用脚手架来创建控制器。现在我想创建行。

假设我想创建员工,让我们说DBA和EF使这成为可能:

    public partial class TBL_EMPLOYEE
    {
        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
        public TBL_EMPLOYEE()
        {
            this.TBL_EMPLOYEE = new HashSet<TBL_EMPLOYEE>();
        }

        public int EMPLOYEE_ID { get; set; }
        public String CO_WORKER_NUMBER { get; set; }
        public string NAME { get; set; }
        public string LAST_NAME { get; set; }
        public string SALARY { get; set; }
        public string PHONE_NUMBER { get; set; }
        public string EMAIL { get; set; }
        public string { get; set; }

        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
    }

现在,我需要一个创建员工的视图,让我们称之为 VIEW 1 在此视图中,用户只需指定名称和姓氏值。两者都是必需的。

现在,在这个 VIEW 1 的情况下,我可以在同一个类中使用以下数据注释属性,即:

        [Required]
        public string NAME { get; set; }

        [Required]
        public string LAST_NAME { get; set; }

现在,让我们进入下一个案例。我需要另一个视图,我们称之为视图2 在这一个中,用户需要指定所有属性的所有值。除名称和姓氏外,所有这些都是必需的。

真实问题

如何为两个视图使用相同的模型类?上面的示例可能看起来有点愚蠢和微不足道的验证,但我一直在更大的项目中实体更大,并且拥有不同的ViewModel类的想法就是这么多工作。

我在.NET开发中偶然发现了这一点,我必须为每个视图创建一个ViewModel类,以便具体了解用户需要输入和验证的内容。这是唯一的方法吗?

2 个答案:

答案 0 :(得分:1)

为避免重复出现微小变化的模型,请尝试以下操作:

https://stackoverflow.com/a/18898112/6850962

基本上,创建一个基础模型,其数据注释适用于所有情况(例如:DisplayName),然后扩展模型以进行变化(例如:Required属性)。

答案 1 :(得分:0)

如果您尝试使用实体框架实体方法,我不会将验证属性放在这些实体上。我要么:

  1. 创建单独的不同类,然后将数据从EF实体复制到模型,反之亦然(通过明确编写代码,或使用AutoMapper等工具)。然后,您可以根据需要定义验证规则。不幸的是,这种方法确实将验证与模型紧密结合,因此模型重用可能不尽可能。

  2. 使用更流畅的验证框架,如FluentValidation(https://github.com/JeremySkinner/FluentValidation)。这样做的好处是您可以使用内部规则定义外部类,可以根据具体情况对其进行不同的应用。该模型可能仍然需要模型本身的一些指标来确定适用的规则,但这是处理您描述的方案的另一种功能方法。