У меня есть ситуация, когда я инициализирую свою модель в DatabaseInitializer () для EF 4.1 и получаю эту досадную ошибку. "Validation failed for one or more entities. See 'EntityValidationErrors' property for more details."
Итак, я перехожу к этому EntityValidationErrors, и есть поле, {System.Data.Entity.Validation.DbEntityValidationResult}
которое вообще не дает мне никакой информации о том, какое поле не удалось инициализировать , Есть ли способ получить больше информации об этой ошибке?
Чтобы очистить вещи:
Я знаю, как исправить проблему длины строки. Я спрашиваю, как мне получить точное имя поля, которое нарушает модель.
ex
на$exception
и получить тот же результат.ex
с ж / д вашcatch (Exception THIS)
естьSystem.Linq.Enumerable.ToList(System.Linq.Enumerable.ToList(((System.Data.Entity.Validation.DbEntityValidationException)$exception).EntityValidationErrors)[0].ValidationErrors)[0].ErrorMessage
Вы можете попробовать это в блоке try / catch?
источник
Лучшее решение, на мой взгляд, это централизованно обрабатывать ошибки такого рода.
просто добавьте этот метод в основной
DbContext
класс:Это перезапишет
SaveChanges()
метод вашего контекста, и вы получите список через запятую, содержащий все ошибки проверки сущности.надеюсь, что это полезно.
источник
Ну, у меня была такая же проблема. Моя модель хорошо работала в EF CTP5, но не смогла встроить 4.1 с той же ошибкой "" Проверка не удалась для одной или нескольких сущностей ", когда я попытался ее инициализировать. Я выяснил, что у меня есть свойство:
Затем в методе seed в переопределенном инициализаторе у меня был довольно длинный (около 600 букв) комментарий.
Я думаю , что точка: в EF 4.1 вы должны аннотации набора данных в явном виде в некоторых случаях. Для меня настройка:
помог. Это странно, так как у CTP5 не было проблем с этим.
источник
Я нашел полезным создать оболочку SaveChanges, которая делает EntityValidationErrors более читабельными:
а затем изменил «entity.SaveChanges ()» на «SaveChanges (entity)» во всем моем проекте
источник
Я знаю, что это старый вопрос, но вот мой ответ:
и если вы сначала используете код, вы также можете глобализировать свои сообщения об ошибках, используя несколько файлов ресурсов
Например, у меня есть эти два отдельных файла ресурсов, один для ошибки и один для имени свойства, и я использую их следующим образом:
Как вы можете видеть, я полностью перевел свои сообщения об ошибках, включая имена свойств, чтобы потом я мог использовать их в пользователе, например:
источник