Почему интерфейс ошибки EF так бесполезен? Как можно найти точную причину исключения DbContext.SaveChanges, когда ошибки почти ничего не сообщают о параметрах, участвующих в исключении?Как найти точную причину исключения DbContext.SaveChanges?
Один серьезный недостаток EF
, на мой взгляд, определяет то, что вызывает данное исключение после выпуска SaveChanges()
.
Давно я боролся с интерфейсом ошибки EF. Я однажды немного помог себе, написав method, что flattens все ошибки проверки контекста db, содержащие простые сообщения с таблицей, столбцом и сообщением об ошибке для каждой ошибки. В противном случае вам нужно глубоко вникать в структуры ошибок, возвращаемые dbContext ... Интересно, почему они так сделали!
В любом случае, к моей проблеме: Я выполняю несколько операций над несколькими объектами в моем dbContext, а в конце выпуска один единственный SaveChanges()
.
Теперь я GetValidationErrors()
возвращает 0 ошибок, поэтому никаких вопросов проверки не существует. Но SaveChanges
бросает следующее исключение:
Превращение datetime2 типа данных в тип данных даты и времени привело к значению вне-диапазона. Заявление было прекращено.
Как DbContext
указывает на конкретную причину ошибки в любом случае, когда то, что он переходит к вам вложенная лабиринт внутренних объектов, выглядит следующим образом:
?!
EF использует поля Datetime2 при обращении/магазины моделей. Вы позволяете EF создавать модель или сопоставлять ее с существующей базой данных? – MutantNinjaCodeMonkey
Просто нашел вопрос SO, который решает эту проблему: http://stackoverflow.com/questions/3586566/datetime2-error-when-using-entity-framework-in-vs-2010-net-4-0 – MutantNinjaCodeMonkey
@MutantNinjaCodeMonkey: работая в EF Database First mode (отображает существующую базу данных) – Veverke