ทางออกที่ง่ายที่สุดคือการแทนที่SaveChanges
ในคลาสเอนทิตีของคุณ คุณสามารถจับDbEntityValidationException
, แกะข้อผิดพลาดจริงและสร้างใหม่DbEntityValidationException
ด้วยข้อความที่ปรับปรุงแล้ว
- สร้างคลาสบางส่วนถัดจากไฟล์ SomethingSomething.Context.cs ของคุณ
- ใช้รหัสที่ด้านล่างของโพสต์นี้
- แค่นั้นแหละ. การใช้งานของคุณจะใช้ SaveChanges แบบ overriden โดยอัตโนมัติโดยไม่ต้องมี refactor
ข้อความยกเว้นของคุณจะมีลักษณะเช่นนี้:
System.Data.Entity.Validation.DbEntityValidationException: การตรวจสอบล้มเหลวสำหรับเอนทิตีหนึ่งรายการขึ้นไป ดูคุณสมบัติ 'EntityValidationErrors' สำหรับรายละเอียดเพิ่มเติม ข้อผิดพลาดในการตรวจสอบความถูกต้องคือ: ฟิลด์ PhoneNumber ต้องเป็นสตริงหรือประเภทอาร์เรย์ที่มีความยาวสูงสุด '12' จำเป็นต้องกรอกข้อมูลนามสกุล
คุณสามารถวาง 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/