有一个类 - 它是一个普通的类,没有什么特别之处:
public class Trader{
public Guid UserId {get;set;}
public int TraderId { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string PhoneNumber { get; set; }
public string Skype { get; set; }
public string Photo { get; set; }
public string Email { get; set; }
public virtual User User { get; set; }
}
映射:
public TraderMap()
{
this.ToTable("Trader", "General");
this.HasKey(a => a.TraderId);
this.HasRequired(a => a.User).WithMany().HasForeignKey(a => a.UserId);
Property(a => a.UserId).HasColumnName("UserID").IsRequired();
Property(a => a.TraderId).HasColumnName("TraderID").IsRequired();
Property(a => a.FirstName).HasMaxLength(50).IsRequired();
Property(a => a.LastName).HasMaxLength(50).IsRequired();
Property(a => a.PhoneNumber).HasMaxLength(25).IsRequired();
Property(a => a.Skype).HasMaxLength(50).IsOptional();
Property(a => a.Photo).HasMaxLength(100).IsOptional();
Property(a => a.Email).HasMaxLength(100).IsRequired();
}
当我在表单 (View) 中留空 FirstName 或其他需要 IsRequired() 的字段时,验证不会触发。它只会遇到以下错误:
Validation failed for one or more entities. See 'EntityValidationErrors' property for more details.
不幸的是,这个错误并没有太多的提示信息。我深入挖掘了一下,但我唯一能得到的东西是:
Invalid column name discriminator.
我以为这可能与 User 类中的某些遗忘的继承有关,但我没有找到任何可疑的东西。
问题在于当我在 Trader 类中使用属性时,一切都按预期工作。
public class Trader{
public Guid UserId {get;set;}
public int TraderId { get; set; }
[Required]
public string FirstName { get; set; }
[Required]
public string LastName { get; set; }
[Required]
public string PhoneNumber { get; set; }
public string Skype { get; set; }
public string Photo { get; set; }
[Required]
public string Email { get; set; }
public virtual User User { get; set; }
}
有了属性,验证工作正常,@Html.ValidationMessageFor开始显示错误消息,并且不允许发送NULL值。
你有什么建议,我的映射存在什么问题吗?
更新1 实际上,上面的属性是解决此问题的一种可能方案。