用于验证多个值的 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;
}
}
我有一个示例模型 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;
}
}