Solusi termudah adalah menimpa SaveChanges
kelas entitas Anda. Anda dapat menangkap DbEntityValidationException
, membuka bungkusan kesalahan aktual dan membuat yang baru DbEntityValidationException
dengan pesan yang ditingkatkan.
- Buat kelas parsial di sebelah file SomethingSomething.Context.cs Anda.
- Gunakan kode di bagian bawah posting ini.
- Itu dia. Implementasi Anda akan secara otomatis menggunakan SaveChanges yang diganti tanpa kerja refactor.
Pesan pengecualian Anda sekarang akan terlihat seperti ini:
System.Data.Entity.Validation.DbEntityValidationException: Validasi gagal untuk satu entitas atau lebih. Lihat properti 'EntityValidationErrors' untuk detail lebih lanjut. Kesalahan validasi adalah: Field PhoneNumber harus berupa tipe string atau array dengan panjang maksimum '12'; Kolom LastName wajib diisi.
Anda bisa menjatuhkan SaveChanges yang ditimpa di kelas apa pun yang mewarisi dari 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);
}
}
}
The DbEntityValidationException
juga mengandung entitas yang menyebabkan kesalahan validasi. Jadi jika Anda memerlukan lebih banyak informasi, Anda dapat mengubah kode di atas untuk menampilkan informasi tentang entitas ini.
Lihat juga: http://devillers.nl/improving-dbentityvalidationexception/