【问题标题】:.NET FluentValidation: Validate against a collection of the same type: overlapping dates.NET FluentValidation:针对相同类型的集合进行验证:重叠日期
【发布时间】:2015-08-09 20:00:48
【问题描述】:

是否可以使用 FluentValidation 库针对集合进行验证。例如,检查新对象的开始/结束日期是否与同一类型集合中的日期重叠?如果没有,是否有人对执行此类验证有任何建议?

【问题讨论】:

    标签: .net fluentvalidation


    【解决方案1】:

    如果你想验证一组项目,它们不应该相互重叠——你可以使用我描述的方法here。当日期间隔相互重叠时,只需将 IEqualityComparer 实现更改为返回 true

    更新

    如果您的集合与视图模型无关并放置在数据库中,例如,您可以使用返回业务逻辑结果的简单谓词(示例中使用的已知接口的构造函数注入):

    public class ViewModelValidator
    {
        public ViewModelValidator(IIntervalService intervalService)
        {
            RuleFor(model => model.NewInterval)
                .Must(interval => !intervalService.IsOverlapExistingIntervals(interval.StartDate, interval.EndDate));
        }
    }
    

    【讨论】:

    • 这个方法是不是必须要使用从属集合?我正在尝试针对未绑定到我正在验证的对象的现有集合进行验证。例如,在我将对象添加到集合之前,我想确保它不会与现有日期重叠。也许我可以用我试图验证的集合重载 Validate 函数,然后添加一个规则来检查它是否重叠???
    • 感谢您的帮助,先生。我能够在我的场景中完成这项工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多