C#代码优先无法识别数据注释

时间:2018-07-11 15:57:43

标签: c# sql asp.net-mvc ef-code-first

当我使用Update-Database时,它通常运行良好,并且在SQL端看到了更改。创建模型时,所有属性都使用Required,但是在删除此注释后,映射列仍为not null。我通过添加和删除列测试了迁移设置,效果很好。

我的模型是这样的:

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;

namespace Company.Employees {

    [Serializable]
    [Table("EmployeeRecords")]
    public class EmployeeRecords {

        [Key]
        [Required]
        public Guid EmployeeID { get; set; }

        [Required]
        [Display(Name = "Date Submitted")]
        public DateTime DateSubmitted { get; set; }

        [Display(Name = "Date Processed")]
        public DateTime? DateProcessed { get; set; }

        [Required]
        [Display(Name = "Submitted By")]
        public string SubmittedBy { get; set; }

        [Required]
        [Display(Name = "Employees")]
        public Int16 Employees { get; set; }

        [Required]
        [Display(Name = "Total Wages")]
        public decimal TotalWages { get; set; }

        [Required]
        [Display(Name = "Total Benefits")]
        public decimal TotalBenefits { get; set; }

        public List<EmployerReference> EmployerReferences { get; set; }
    }
}

您会看到属性DateProcessed不是[Required]。但是EF没看到这个。

我还使用其他数据注释进行了测试。我添加了[MaxLength(450)],然后运行了Update-Database。这可以正常工作,在SQL中,映射的列更改为VARCHAR(450)

可能我走了,这是我的第一个使用代码优先的应用程序。请让我知道是否需要更多信息。谢谢!

编辑:

我刚刚尝试使用Fluent API,如下所示:

modelBuilder.Entity<RemittanceBatch>().Property(m => m.DateProcessed).IsOptional();
base.OnModelCreating(modelBuilder);

这也不起作用。

编辑2:

它使我可以使DateSubmitted字段为空。但是不允许我将DateProcessed字段设为可空。这有什么区别...嗯

1 个答案:

答案 0 :(得分:0)

因此,我可能永远也找不到真正的问题所在。现在,我愿意将其称为错误。这是解决问题的方法。

  • 从模型中删除属性
  • 运行Update-Database
  • 再次添加属性
  • 运行Update-Database

魔术!可行!