EF中索引数据注释的错误消息

时间:2014-10-10 17:41:39

标签: c# .net entity-framework data-annotations

您好我正在使用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定义。 你能告诉我如何处理异常消息,以便它正常处理它吗?

1 个答案:

答案 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
}