naprawdę nowych do C#, ASP.NET MVC i FluentValidation.Pisanie rodzajowe FluentValidation niestandardową walidatora do sprawdzenia UNIQUE
Mam modelu użytkownika, takich jak:
public class UserDetails{
public int ID { get; set; }
public string UserName { get; set; }
public string Email { get; set; }
}
teraz, byłem walidacji nazwę użytkownika i e-mail przy użyciu FluentValidation, coś jak:
public AdminDetailsValidator(){
RuleFor(ad => ad.UserName).NotNull().Must(UniqueUserName(UserName)).WithMessage("UserName not Available");
RuleFor(ad => ad.Email).NotNull().Must(UniqueEmail(Email)).WithMessage("This Email id has already been registered"); ;
}
public bool UniqueUserName(string un)
{
if (UserDbContext.userDetails.SingleOrDefault(p => p.UserName == un) == null)
{
return true;
}
else
{
return false;
}
}
public bool UniqueEmail(string em)
{
if (UserDbContext.userDetails.SingleOrDefault(p => p.Email == em) == null)
{
return true;
}
else
{
return false;
}
}
Ale wolałbym chcą bardziej ogólna UniqueValidator, którą mogę używać z wieloma klasami i właściwościami. Lub Atleast, nie muszę wykonywać osobnych funkcji dla każdej nieruchomości. Więc przyjrzałem się niestandardowym walidatorom. Ale nie mam pojęcia, jak mogę użyć tej funkcji do moich potrzeb. chcę zrobić coś takiego:
RuleFor(ad => ad.Email).NotNull().SetValidator(new UniquePropertyValidator<UserDbContext>(userDetails.Email).WithMessage("This Email id has already been registered");
Czy to w ogóle możliwe, aby to zrobić? Chcę przekazać parametr DbContext jako typ i właściwość jako argument (lub jego pewną odmianę, zależnie od tego, która funkcja działa). i metoda może sprawdzić właściwość względem tabeli i zwrócić, jeśli jest unikalna lub nie.
Być może nie chcesz wstępnie tworzyć kontekstu db. – abatishchev
Tak dobry punkt, normalnie bym prawdopodobnie walidatora skonstruowany przy użyciu iniekcji zależność, ale nie chcą, aby sprawa bardziej skomplikowana, to już jest –
Dzięki za szybką odpowiedź (nie można tego samego powiedzieć o sobie .. był zajęty innym projektem). Rozumiem większość sugestii, z wyjątkiem parametrów wewnątrz 'UniquePropertyValidator (....)'. Od razu rzuca mi to spojrzenie. Czy też "ud => ud.Email" nie będzie wartością właściwości? jak mogę go zaakceptować jako funkcję ('Func propertyAccessorFucn')? –