En kolay çözüm SaveChanges
varlık sınıfınızı geçersiz kılmaktır. Geliştirilmiş mesajla yakalayabilir, DbEntityValidationException
gerçek hataları açabilir ve yeni bir DbEntityValidationException
mesaj oluşturabilirsiniz.
- SomethingSomething.Context.cs dosyanızın yanında kısmi bir sınıf oluşturun.
- Bu yazının altındaki kodu kullanın.
- Bu kadar. Uygulamanız, herhangi bir refactor çalışması olmadan, geçersiz kılınan SaveChanges'i otomatik olarak kullanacaktır.
İstisna mesajınız şimdi şöyle görünecek:
System.Data.Entity.Validation.DbEntityValidationException: Bir veya daha fazla varlık için doğrulama başarısız oldu. Daha fazla ayrıntı için 'EntityValidationErrors' özelliğine bakın. Doğrulama hataları şunlardır: PhoneNumber alanı, maksimum uzunluğu '12' olan bir dize veya dizi türü olmalıdır; Soyadı alanı zorunludur.
Geçersiz kılınan SaveChanges'i, aşağıdakilerden devralan herhangi bir sınıfa bırakabilirsiniz 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
Ayrıca doğrulama hataları neden varlıkları içerir. Daha fazla bilgiye ihtiyacınız varsa, bu varlıklar hakkında bilgi almak için yukarıdaki kodu değiştirebilirsiniz.
Ayrıca bkz: http://devillers.nl/improving-dbentityvalidationexception/