Mam sytuację, w której inicjuję mój model w DatabaseInitializer () dla EF 4.1 i otrzymuję ten irytujący błąd. "Validation failed for one or more entities. See 'EntityValidationErrors' property for more details."
Więc przechodzę do tego EntityValidationErrors i jest pole, {System.Data.Entity.Validation.DbEntityValidationResult}
które nie daje mi żadnych informacji o tym, które pole nie było w stanie zainicjować . Czy istnieje sposób, aby uzyskać więcej informacji o tym błędzie?
Aby usunąć rzeczy:
Wiem, jak rozwiązać problem długości łańcucha. Pytam o to, jak uzyskać dokładną nazwę pola, która psuje model.
ex
z$exception
i uzyskać ten sam rezultat.ex
w / e yourcatch (Exception THIS)
isSystem.Linq.Enumerable.ToList(System.Linq.Enumerable.ToList(((System.Data.Entity.Validation.DbEntityValidationException)$exception).EntityValidationErrors)[0].ValidationErrors)[0].ErrorMessage
Możesz spróbować tego w bloku try / catch?
źródło
Moim zdaniem najlepszym rozwiązaniem jest radzenie sobie z tego rodzaju błędami w sposób scentralizowany.
po prostu dodaj tę metodę do głównej
DbContext
klasy:Spowoduje to zastąpienie
SaveChanges()
metody kontekstu, a otrzymasz listę oddzieloną przecinkami zawierającą wszystkie błędy sprawdzania poprawności encji.mam nadzieję, że to jest pomocne.
źródło
Miałem ten sam problem. Mój model działał dobrze w EF CTP5, ale nie udało się go zbudować w wersji 4.1 z tym samym błędem „„ Sprawdzanie poprawności nie powiodło się dla jednej lub więcej jednostek ”, gdy próbowałem go zainicjować. Stwierdziłem, że mam właściwość
Następnie w metodzie seed w przesłoniętym inicjalizatorze miałem dość długi komentarz (około 600 liter).
Myślę, że chodzi o to: w EF 4.1 Państwo mieć do adnotacji zestaw danych bezpośrednio w niektórych przypadkach. Dla mnie ustawienie:
pomógł. To dziwne, ponieważ CTP5 nie miał z tym problemów.
źródło
Uważam, że przydatne jest utworzenie opakowania SaveChanges, które sprawia, że EntityValidationErrors jest bardziej czytelny:
a następnie zmieniłem „podmioty.SaveChanges ()” na „SaveChanges (podmioty)” w całym moim projekcie
źródło
Wiem, że to stare pytanie, ale oto moja odpowiedź:
a jeśli najpierw użyjesz kodu, możesz także zglobalizować komunikaty o błędach, używając wielu plików zasobów
Na przykład mam te dwa osobne pliki zasobów, jeden dla błędu, a drugi dla nazwy właściwości i używam ich w następujący sposób:
Jak widać, całkowicie przetłumaczyłem komunikaty o błędach, w tym nazwy właściwości, dzięki czemu mogłem je później wykorzystać na przykład u użytkownika:
źródło