【发布时间】:2012-04-20 07:31:16
【问题描述】:
有一个类——它是一个普通的类,没什么特别的:
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();
}
当我在表单(视图)中将 FirstName 或 IsRequired() 的其他字段留空时,验证不会启动。它只是遇到错误:
一个或多个实体的验证失败。看 'EntityValidationErrors' 属性以获取更多详细信息。
不幸的是,这个错误并没有说明太多。我挖得更深了,但我唯一能得到的是
列名鉴别器无效。
我认为这会是某处被遗忘的继承(对于 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 其实上面的属性是解决这个问题的一种可能。
【问题讨论】:
-
你能发布你的用户类和映射吗?
-
我不明白。显然验证 IS 工作,当您尝试插入空白时,错误是“验证失败”,因此验证工作正常。
-
"基于 Fluent API 配置引发的验证错误不会自动到达 UI,但您可以在代码中捕获它,然后做出相应的响应。"来自msdn.microsoft.com/en-au/data/…
标签: c# asp.net-mvc-3 entity-framework ef-code-first entity-framework-4.3