您好我正在使用Entity Framework 6.1.1,它支持Index数据注释功能。 我在我的实体类中定义了一个字段:
[Index("scoreIndex", IsUnique=true)]
public int score{ get; set; }
这很好用。但是,我试图找出当分数不唯一时如何显示消息。现在它只是抛出异常。我尝试了以下
[Index("scoreIndex", IsUnique=true, ErrorMessage="Score must be unique")]
但它不包含此Index注释类的ErrorMessage定义。 你能告诉我如何处理异常消息,以便它正常处理它吗?
答案 0 :(得分:2)
IndexAttribute
不是验证属性,这就是它没有ErrorMessage属性的原因,它也没有用于在一系列范围内验证它的IsValid()方法。有效值。
这意味着它不能像典型的验证属性(Required,MaxLength等)那样进行验证。 IsUnique 属性仅在表创建期间用于创建唯一索引。
如果要使用属性,则应创建自定义属性以检查索引的唯一性。该索引当然会继承ValidationAttribute
类,并且必须在内部访问EF DbContext以检查属性验证代码中的唯一性。
如果您不喜欢这种数据注释方法,并且它太复杂了,那么您可以处理try-catch块中的SaveChanges()方法抛出的DbUpdateException
,解码错误消息并返回在您的视图模型中友好的东西。
try
{
using (var ac = new ApplicationDbContext())
{
// Add non-unique data
ac.SaveChanges();
}
}
catch (DbUpdateException ex)
{
// Handle index error
}