Аннотации данных EF для проверки нескольких значений - PullRequest
0 голосов
/ 15 января 2019

У меня есть пример модели класса Item. Ниже приведен псевдокод для описания модели.

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

    public int Accepted {get;set;}

    public int Rejected {get;set;}
}

Я хочу добавить аннотацию данных, которая требует, чтобы: (Принято + Отклонено) <= Итого. Как я могу сделать это, используя аннотации данных? Мой другой вариант - проверить эту логику в моей программе, но я подумал, что это выглядит как реалистичное ограничение базы данных, которое может быть возможно посредством аннотаций данных или чего-то подобного. </p>

Я смотрел на аннотации, такие как GreaterThan, которые позволяют вам сравнивать два свойства, но я не нашел ничего, что бы правильно работало для 3. Я бы предпочел также избегать написания моей собственной проверки, так как это просто добавлены дополнительные накладные расходы и не удалось сделать это в предыдущих попытках.

Дайте мне знать, если потребуется уточнение или дополнительный код.

1 Ответ

0 голосов
/ 15 января 2019

В этом случае у вас есть два решения для этого. Вы можете написать собственный атрибут проверки или использовать 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;
    }
}
...