C# 如何在验证方法中区分编辑和创建新项?

C# 如何在验证方法中区分编辑和创建新项?,c#,asp.net-mvc,validation,C#,Asp.net Mvc,Validation,我试图确保我的cms中的每个项目都有一个唯一的url 该模型已制作成一个IValidatableObject,我正在使用下面的验证方法 我遇到的麻烦是辨别项目是正在创建(url不得与任何现有项目匹配)还是正在编辑(url不得与自身以外的任何项目匹配) 我怎样才能做到这一点。。。我的方法对吗 public IEnumerable<ValidationResult> Validate(ValidationContext validationContext) {

我试图确保我的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" });
        }

    } 
公共IEnumerable验证(ValidationContext ValidationContext) { DataContext db=新的DataContext(); string itemContainingURL=db.CMSPages.Where(c=>c.URL==URL)。选择(c=>c.Title.SingleOrDefault(); 如果(!string.IsNullOrEmpty(itemContainingURL)) { 返回新的ValidationResult(String.Format(“URL应该是唯一的,但它已经存在于项:{0}”、itemContaineingUrl)、new[]{“URL”}); } }
这有关系吗?只要测试是否存在共享URL的不同ID的项,就可以涵盖这两种情况

伪代码示例:

bool IsUnique()
{
    return !repository.Any(x => x.ID != this.ID && x.URL == this.URL);
}

当然,这是我今天问的第二个愚蠢的问题谢谢,没问题。不管怎么说,这是一个好问题,有时只需要再多一双眼睛。