我使用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!
答案 0 :(得分:2)
这非常简单,因为Name
是string
(可以为空),而DistributorId
是int
(不可为空)。这意味着DistributorId
始终存在(虽然可能不是您要查找的值,但仍然满足[Required]
验证。
您可能想要改变的是
[Required]
替换为将验证实际值的内容[Range]
就是一个很好的示例。 DistributorId
作为字符串,在写入数据库之前将其转换为int。希望这有帮助