Найпростішим рішенням є перекриття SaveChanges
вашого класу сутностей. Ви можете знайти DbEntityValidationException
, розкрутити фактичні помилки та створити нове DbEntityValidationException
з покращеним повідомленням.
- Створіть частковий клас поруч із вашим файлом SomethingSomething.Context.cs.
- Скористайтеся кодом внизу цієї публікації.
- Це воно. Ваша реалізація автоматично використовуватиме замінені SaveChanges без жодної роботи рефактора.
Тепер ваше повідомлення про виключення виглядатиме так:
System.Data.Entity.Validation.DbEntityValidationException: Не вдалося перевірити для однієї або декількох сутностей. Докладніше див. У властивості EntityValidationErrors. Помилками перевірки є: Поле PhoneNumber має бути типом рядка або масиву з максимальною довжиною '12'; Поле LastName обов'язкове.
Ви можете залишити замінені SaveChanges у будь-якому класі, який успадковує DbContext
:
public partial class SomethingSomethingEntities
{
public override int SaveChanges()
{
try
{
return base.SaveChanges();
}
catch (DbEntityValidationException ex)
{
// Retrieve the error messages as a list of strings.
var errorMessages = ex.EntityValidationErrors
.SelectMany(x => x.ValidationErrors)
.Select(x => x.ErrorMessage);
// Join the list to a single string.
var fullErrorMessage = string.Join("; ", errorMessages);
// Combine the original exception message with the new one.
var exceptionMessage = string.Concat(ex.Message, " The validation errors are: ", fullErrorMessage);
// Throw a new DbEntityValidationException with the improved exception message.
throw new DbEntityValidationException(exceptionMessage, ex.EntityValidationErrors);
}
}
}
Він DbEntityValidationException
також містить об'єкти, які спричинили помилки перевірки. Отже, якщо вам потрібна ще більше інформації, ви можете змінити вищевказаний код, щоб вивести інформацію про ці сутності.
Дивіться також: http://devillers.nl/improving-dbentityvalidationexception/