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 に答える