Tôi đã gặp khó khăn với điều này trong một thời gian, và đây không phải là xác thực của khách hàng vì nó yêu cầu một chuyến đi khứ hồi, nhưng nó cho phép bạn hưởng lợi từ phần tóm tắt Xác thực và người trợ giúp thư trong mẫu chuẩn. Trong phương pháp hành động điều khiển của bạn, bạn chỉ đơn giản là quấn SaveChanges()
cuộc gọi của bạn trong một thử - bắt và thêm các lỗi dẫn đến ModelState
như sau:
try {
//This does not pick up fluent validation failures
if (ModelState.IsValid) {
db.Entity.Add(entity);
db.SaveChanges();
//Users want to create loads of my entities without seeing the index...
return RedirectToAction("Create");
}
} catch (DbEntityValidationException e) {
//Log errors
foreach (var result in e.EntityValidationErrors) {
foreach(var error in result.ValidationErrors){
ModelState.AddModelError(error.PropertyName, error.ErrorMessage);
}
}
}
//return to view with current model + validation errors
return View(entity)
này sẽ đương nhiên đòi hỏi làm việc nhiều hơn một chút nếu bạn đang tiết kiệm nhiều đơn vị ở đây .
Tất nhiên sử dụng một đối tượng Xem các mẫu như Ladislav gợi ý sẽ là cách tiếp cận đúng, tuy nhiên tôi đã sử dụng này để hỗ trợ một giao diện người dùng kiểm tra yêu cầu đối với hạ lưu thử nghiệm tích hợp hệ thống trước thời hạn ...
Tại sao EF thậm chí không cần ánh xạ như "HasMaxLength"? Nếu giá trị dài hơn, máy chủ SQL sẽ từ chối nó nếu viết được thử, và nó không quan trọng khi đọc vì kiểu 'chuỗi' không có giới hạn độ dài. Vậy bản đồ này thực sự là gì? –
Tôi biết đây là một câu hỏi cũ nhưng tôi nghĩ rằng tôi sẽ thêm cho người đọc trong tương lai. Một lý do là nếu bạn sử dụng mã đầu tiên để sau đó tạo ra cơ sở dữ liệu, chú thích api/data thông thạo sau đó được sử dụng trong việc xây dựng các câu lệnh tạo bảng, nơi nó cần biết chiều dài mong muốn và cứ thế. – Kate