Entity framework 实体框架中的多组验证
我遇到了这个问题,在保存模型时,我应该允许不同的验证集。通常,验证取决于用户希望如何保存数据。例如,如果用户希望将其数据保存为“草稿”,我应该允许某些字段为空。如果不是“草稿”,我应该多加限制Entity framework 实体框架中的多组验证,entity-framework,validation,Entity Framework,Validation,我遇到了这个问题,在保存模型时,我应该允许不同的验证集。通常,验证取决于用户希望如何保存数据。例如,如果用户希望将其数据保存为“草稿”,我应该允许某些字段为空。如果不是“草稿”,我应该多加限制 class Form { public int ID { get; set; } [Required("Title is required.")] public string Title { get; set; } [Required("Body is required
class Form
{
public int ID { get; set; }
[Required("Title is required.")]
public string Title { get; set; }
[Required("Body is required.")]
public string Body { get; set; }
public bool IsDraft { get; set; }
}
在上面的代码中,我希望仅当IsDraft为false时body的验证才有效
如何创建多组验证?或者如何在实体框架中正确创建条件验证?数据注释不仅用于验证,还用于使代码与数据库同步。即,首先在EF代码中,若删除必填字段,则数据库必须允许在匹配列中插入NULL 因此,您可以采用以下方法:
public class FormDto: IValidatableObject
{
public int ID { get; set; }
[Required("Title is required.")]
public string Title { get; set; }
[Required("Body is required.")]
public string Body { get; set; }
public bool IsDraft { get; set; }
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
if(!IsDraft && string.IsNullOrWhiteSpace(Body)) yield return new ValidationResult("Body is required.", new string [] {"Body"});
if(!IsDraft && string.IsNullOrWhiteSpace(Title)) yield return new ValidationResult("Title is required.", new string [] {"Title"});
}
}
public static class IValidatableObjectExtensions
{
public static void SelfValidate(this IValidatableObject model)
{
ValidationContext ctx = new ValidationContext(model);
Validator.ValidateObject(model, ctx, true);
}
}