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

2023-12-29

您好,我正在使用实体框架 6.1.1,它支持索引数据注释功能。 我在实体类中定义了一个字段:

    [Index("scoreIndex", IsUnique=true)]
    public int score{ get; set; }

这工作正常。但是,我试图弄清楚当分数不唯一时如何显示消息。现在它只是抛出一个异常。我尝试了以下方法

    [Index("scoreIndex", IsUnique=true, ErrorMessage="Score must be unique")]

但它不包含此 Index 注释类的 ErrorMessage 定义。 您能告诉我如何处理异常消息,以便它优雅地处理它吗?


The IndexAttribute不是验证属性,因此它没有 ErrorMessage 属性,也没有用于根据一系列有效值对其进行验证的 IsValid() 方法。

这意味着它的设计目的不是像典型的验证属性(必需、最大长度等)那样进行验证。这IsUnique属性仅在表创建过程中用于创建唯一索引。

如果您想使用属性,那么您应该创建一个自定义属性来检查索引的唯一性。该索引当然会继承ValidationAttribute类,并且必须在内部访问 EF DbContext 以检查属性验证代码中的唯一性。

如果您不喜欢这种数据注释方法,并且它太复杂,那么您可以处理DbUpdateException由 try-catch 块中的 SaveChanges() 方法抛出,解码错误消息并在视图模型中返回一些友好的内容。

try
{
    using (var ac = new ApplicationDbContext())
    {
        // Add non-unique data

        ac.SaveChanges();
    }
}
catch (DbUpdateException ex)
{
    // Handle index error
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

EF 中索引数据注释的错误消息 的相关文章

随机推荐