Mam klasy modelu, które mają właściwość description z atrybutem adnotacji danych StringLength i długość jest ustawiona na 100 znaków. Gdy ta właściwość ma więcej niż 100 znaków, a Entity Framework próbuje zapisać tę właściwość, pojawia się następujący błąd.C# Jak korzystać z DataAnnotations StringLength i SubString do usuwania tekstu
[StringLength(100, ErrorMessage = "Description Max Length is 100")]
public string Description { get; set; }
Błąd:
„Validation nie powiodło się dla jednego lub większej liczby podmiotów Zobacz właściwość«EntityValidationErrors»więcej szczegółów.”
Nie jestem pewien, czy to pomaga w tworzeniu rozwiązań, ale Korzystam z Entity Framework CTP5 i Code First.
Co chcę zrobić, to jeśli opis ma więcej niż 100 znaków, a następnie usunąć znaki, które mają więcej niż 100 znaków, aby można było zapisać opis i nie zgłaszać błędów.
Wierzę, że powinienem móc użyć atrybutu DataAnnotation StringLength ręcznie, aby pomóc mi zidentyfikować prawidłową długość opisu, a następnie użyć SubString do usunięcia dowolnych znaków powyżej prawidłowej kwoty.
Czy ktoś wie, jak korzystać z DataAnnotation w tej sytuacji? Czy są jeszcze dostępne inne opcje?
Aktualizacja Zrobiłem, co sugeruje BrokenGlass i tu moja realizacja jeżeli:
public static class DataAnnotation
{
public static int? GetMaxLengthFromStringLengthAttribute(Type modelClass, string propertyName)
{
int? maxLength = null;
var attribute = modelClass.GetProperties()
.Where(p => p.Name == propertyName)
.Single()
.GetCustomAttributes(typeof(StringLengthAttribute), true)
.Single() as StringLengthAttribute;
if (attribute != null)
maxLength = attribute.MaximumLength;
return maxLength;
}
}
int? maxLength = DataAnnotation.GetMaxLengthFromStringLengthAttribute(typeof(Car), "Description");
if(maxLength != null && car.Description.Length > maxLength)
car.Description = car.Description.Substring(0, maxLength.Value);
BarDev
Czy są jakieś inne znaczniki, które powinienem dodać do tego pytania? –
Niewiele wiadomo na temat DataAnnotation. Jeśli chodzi o inne opcje, możesz po prostu zaimplementować metody pobierające/ustawiające i wykonać sprawdzanie/obcięcie w ustawiaczu. – Rob
Dzięki za sugestię. Po prostu zrobiłem to jako pracę dookoła. Prawdopodobnie nadmiernie komplikuję sprawę. Ale widzę różne sytuacje, w których chciałbym mieć walidację i inne sytuacje, w których chciałbym usunąć dodatkowe postacie. W mojej aplikacji WCF chciałbym usunąć dodatkowy znak i nie zgłaszać błędu, ale w aplikacji do wprowadzania danych takich ASP.NET lub Win Forms chciałbym wywołać wiadomość sprawdzania poprawności dla użytkownika. –