FluentValidation nom unique de validation à l'aide de la base de données
J'ai Catégorie modèle de Nom de domaine, et chaque nom de catégorie doit être unique. J'ai fait la validation et il fonctionne lorsque j'essaie de créer une nouvelle Catégorie, mais j'ai un problème lorsque vous essayez de la modifier. Pour l'instant c'est juste de vérifier si le nom existe et bien sûr que c'est lorsque j'essaie de modifier une même catégorie.
Modèle
[Validator(typeof(CategoryValidator))]
public class Category
{
public int ID { get; set; }
public string Name { get; set; }
virtual public ICollection<Image> Images { get; set; }
}
public class CategoryValidator : AbstractValidator<Category>
{
public CategoryValidator()
{
RuleFor(x => x.Name).NotEmpty().WithMessage("Category name is required.").Must(UniqueName).WithMessage("This category name already exists.");
}
private bool UniqueName(string name)
{
ProjecteDataContext _db = new ProjecteDataContext();
var category = _db.Categories.Where(x => x.Name.ToLower() == name.ToLower()).SingleOrDefault();
if (category == null) return true;
return false;
}
}
Comme vous pouvez le voir j'ai UniqueName(string name)
fonction, mais comment puis-je passer l'ID, ou tout modèle afin que je puisse vérifier si c'est la même id que modèle, je suis en train de l'éditer, puis il passe. Comment ai-je pu passer à quelque chose comme UniqueName(string name, int? id)
? J'ai découvert FluentValidation seulement aujourd'hui et je ne peux pas comprendre.
Vous devez vous connecter pour publier un commentaire.
Prédicat Validateur (aka Doivent) a une surcharge, qui accepte de prédicat à deux paramètres (validé objet et la valeur de la propriété). Dans votre cas, le prédicat de type
Func<Category, string, bool>
. Donc juste ajouterCategory
paramètre à votre nom unique méthode de validation: