是否可以将IValidatableObject与Winforms一起使用



我正在使用EF 6.2开发WinForms。

我正在尝试用实体框架为我的实体实现自定义验证逻辑。

起初,我成功地覆盖了DbContext中的DbEntityValidationResult ValidateEntity方法,并且它运行良好。

但现在我有了很多实体,这变得非常混乱,我想直接在实体类中实现自定义验证。

因此,我尝试实现IValidatableObject接口。以下是一个简单的实体示例:

public class Inspection : IValidatableObject
{
public int Id { get; set; }
[Required(AllowEmptyStrings = false, ErrorMessage = "You must enter a description")]
[StringLength(maximumLength: 15, ErrorMessage = "The description cannot exceed 15 characters")]
public string Description { get; set; }
public DateTime? ActualDate { get; set; }
public DateTime? ValidityDate { get; set; }
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
if (ActualDate > ValidityDate)
{
ValidationResult result = new ValidationResult("Actual Date connot be > to ValidityDate");
yield return result;
}
}
}

现在我读了很多东西,但不知道我必须在哪里调用实体的Validate方法,以及我必须在ValidationContext参数中传递什么值。

我看过的每一个教程都针对MVC场景,所以我想知道是否有可能将其与Winforms一起使用。我可能遗漏了什么,或者这不是Winforms/EF中验证的正确方法。

你能给我一些建议吗?

由于MSDN的文章,我终于找到了解决方案(以及我的错误(:http://msdn.microsoft.com/en-us/data/gg193959.aspx

当我第一次读它时,我在实现接口时错过了一个部分。我忘了定义ValidationResult类的memberNames参数。

所以我改了:

ValidationResult result = new ValidationResult("Actual Date connot be > to ValidityDate");

ValidationResult result = new ValidationResult("Actual Date connot be > to ValidityDate",
new[] { nameof(ActualDate), nameof(ValidityDate) }); 

它如预期的那样发挥了作用。

我仍然想知道,如果手动调用接口的Validate方法,ValidationContext参数中应该传递什么值,但这是另一个问题。

因此,为了回答我自己的问题:是的,可以将IValidatableObject与Winforms一起使用。

相关内容

  • 没有找到相关文章

最新更新