EF数据批注以验证多个值

时间:2019-01-15 15:45:27

标签: c# entity-framework-6 data-annotations

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

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

    public int Accepted {get;set;}

    public int Rejected {get;set;}
}

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

我查看了诸如GreaterThan之类的注释,这些注释使您可以比较两个属性,但是我还没有发现任何对3个属性都能正常工作的注释。我也希望避免编写自己的验证,因为它只是增加了额外的开销,而且在以前的尝试中并不是成功的方法。

让我知道是否需要澄清或进一步的代码。

1 个答案:

答案 0 :(得分:1)

在这种情况下,您有两种解决方案。您可以按照以下方式在模型类中编写自定义验证属性或使用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;
    }
}