用于验证多个值的 EF 数据注释

EF Data Annotation to Validate Multiple Values

我有一个示例模型 class Item。以下是描述模型的伪代码。

public partial class Item
{
    public int Total {get; set;}

    public int Accepted {get;set;}

    public int Rejected {get;set;}
}

我想添加一个数据注释,要求:(已接受 + 已拒绝)<= 总计。我如何使用数据注释来做到这一点?我在我的程序中验证这个逻辑的另一个选择,但我认为这似乎是一个现实的数据库约束,可以通过数据注释或类似的东西来实现。

我查看了诸如 GreaterThan 之类的注释,它允许您比较两个属性,但我还没有找到任何适合 3 的属性。我也宁愿避免编写自己的验证,因为它只是增加了额外的开销,并且在以前的尝试中并不是成功的方法。

如果需要说明或更多代码,请告诉我。

在这种情况下,您有两种解决方案。您可以编写自定义验证属性或在模型 class 中使用 IValidatableObject,如下所示:

使用IValidatableObject:

public partial class Item : IValidatableObject
{
    public int Total {get; set;}

    public int Accepted {get;set;}

    public int Rejected {get;set;}

    public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
    {
            List<ValidationResult> validationResults = new List<ValidationResult>();

            if(Accepted + Rejected > Total)
            {
                validationResults.Add(new ValidationResult("The sum of Accepted and Rejected cannot greater than Total", new[] {""}));
            }

            return validationResults;
    }
}