Posiadam model kategorii, który ma pole Nazwa, a każda nazwa kategorii musi być unikalna. Dokonałem sprawdzania poprawności i działa, gdy próbuję utworzyć nową kategorię, ale mam problem podczas próby jej edycji. Na razie wystarczy sprawdzić, czy nazwa istnieje i oczywiście robi to, gdy próbuję edytować tę samą kategorię.Walidacja unikalnej nazwy FluentValidation przy użyciu bazy danych
model
[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;
}
}
Jak widać mam UniqueName(string name)
funkcję, ale w jaki sposób można przekazać identyfikator lub cały model w nim więc mogę sprawdzić, czy jest to ten sam identyfikator jako modelu Próbuję edytować następnie to mija. Jak mogę przekazać coś takiego, jak UniqueName(string name, int? id)
? Odkryłem FluentValidation tylko dzisiaj i nie mogę dojść do tego.
Dzięki, pracuję teraz. – sed
side note: powinieneś pozbyć się DbContext, gdy tylko skończysz, więc "using (var _db = new ProjecteDataContext())" –