实体框架DataAnnotations验证不起作用

时间:2012-08-21 13:59:21

标签: asp.net-mvc entity-framework data-annotations

我使用EF Power Tools从现有数据库自动生成模型。我使用DataAnnotations来执行所需的验证,除了在验证与其他表(一对多等等)具有外键关系的属性时,大多数情况下都有效。为了完成这些属性的验证,我需要做什么?

在下面的代码中,我试图将DistributorId属性设为必填字段。

 public class Event
{
    public Event()


    public int EventId { get; set; }
    [Remote ("CheckDuplicateEventName","Event",AdditionalFields="InsertMode")]
    [Required(ErrorMessage = "Event Name is required.")]
    public string Name { get; set; }

    [Required(ErrorMessage = "Distributor is required.")]
    public int DistributorId { get; set; }

    public virtual Distributor Distributor { get; set; }

}

映射类

 public EventMap()
    {
        // Primary Key
        this.HasKey(t => t.EventId);

        // Properties
        this.Property(t => t.Name)
            .IsRequired()
            .HasMaxLength(256);

        // Table & Column Mappings
        this.ToTable("Events");
        this.Property(t => t.EventId).HasColumnName("EventId");
        this.Property(t => t.Name).HasColumnName("Name");
        this.Property(t => t.DistributorId).HasColumnName("DistributorId");

        // Relationships
        this.HasRequired(t => t.Distributor)
            .WithMany(t => t.Events)
            .HasForeignKey(d => d.DistributorId);


    }

TNX!

1 个答案:

答案 0 :(得分:2)

这非常简单,因为Namestring(可以为空),而DistributorIdint(不可为空)。这意味着DistributorId始终存在(虽然可能不是您要查找的值,但仍然满足[Required]验证。

您可能想要改变的是

  • [Required]替换为将验证实际值的内容[Range]就是一个很好的示例。
  • 或将DistributorId作为字符串,在写入数据库之前将其转换为int。

希望这有帮助

相关问题