2

我试图确保我的 cms 中的每个项目都有一个唯一的 url。

该模型已成为 IValidatableObject,我正在使用下面的验证方法。

我遇到的麻烦是辨别项目是正在创建(url 不得与任何现有项目匹配)还是正在编辑(url 不得与自身以外的任何项目匹配)。

我怎么能这样做......我什至以正确的方式接近这个?

    public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
    {
        DataContext db = new DataContext();
        string itemContainingURL = db.CMSPages.Where(c => c.URL == URL).Select(c => c.Title).SingleOrDefault();
        if (!string.IsNullOrEmpty(itemContainingURL))
        {
            yield return new ValidationResult(String.Format("URL should be unique, but it already exists for item: {0}", itemContainingURL), new[] { "URL" });
        }

    } 
4

1 回答 1

1

有关系吗?只需测试是否存在共享 URL的具有不同 ID的项目,您就可以涵盖这两种情况。

示例伪代码:

bool IsUnique()
{
    return !repository.Any(x => x.ID != this.ID && x.URL == this.URL);
}
于 2013-07-23T09:55:52.007 回答