Giải pháp đơn giản nhất là ghi đè lên SaveChanges
lớp thực thể của bạn. Bạn có thể nắm bắt DbEntityValidationException
, gỡ bỏ các lỗi thực tế và tạo một thông báo mới DbEntityValidationException
với thông báo được cải thiện.
- Tạo một lớp một phần bên cạnh tệp SomethingS Something.Context.cs của bạn.
- Sử dụng mã ở dưới cùng của bài viết này.
- Đó là nó. Việc triển khai của bạn sẽ tự động sử dụng SaveChanges overriden mà không cần bất kỳ công việc tái cấu trúc nào.
Thông báo ngoại lệ của bạn sẽ trông như thế này:
System.Data.Entity.Validation.DbEntityValidationException: Xác thực thất bại cho một hoặc nhiều thực thể. Xem thuộc tính 'EntityValidationErrors' để biết thêm chi tiết. Các lỗi xác thực là: Trường PhoneNumber phải là kiểu chuỗi hoặc mảng có độ dài tối đa '12'; Trường LastName là bắt buộc.
Bạn có thể thả SaveChanges bị ghi đè trong bất kỳ lớp nào kế thừa từ 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);
}
}
}
Nó DbEntityValidationException
cũng chứa các thực thể gây ra lỗi xác nhận. Vì vậy, nếu bạn yêu cầu nhiều thông tin hơn nữa, bạn có thể thay đổi mã trên thành thông tin đầu ra về các thực thể này.
Xem thêm: http://devillers.nl/improving-dbentityvalidationexception/