В этой главе мы узнаем о методах проверки, которые можно использовать в ADO.NET Entity Framework для проверки данных модели. Entity Framework предоставляет большое разнообразие функций проверки, которые могут быть реализованы в пользовательском интерфейсе для проверки на стороне клиента или могут использоваться для проверки на стороне сервера.
-
В Entity Framework проверка данных является частью решения для обнаружения неверных данных в приложении.
-
Entity Framework проверяет все данные перед их записью в базу данных по умолчанию, используя широкий спектр методов проверки данных.
-
Однако Entity Framework приходит после проверки данных пользовательского интерфейса. Таким образом, в этом случае существует необходимость в проверке сущности для обработки любых исключений, которые выдает EF, и отображения общего сообщения.
-
Существуют некоторые методы проверки данных для улучшения проверки ошибок и способов передачи сообщений об ошибках пользователю.
В Entity Framework проверка данных является частью решения для обнаружения неверных данных в приложении.
Entity Framework проверяет все данные перед их записью в базу данных по умолчанию, используя широкий спектр методов проверки данных.
Однако Entity Framework приходит после проверки данных пользовательского интерфейса. Таким образом, в этом случае существует необходимость в проверке сущности для обработки любых исключений, которые выдает EF, и отображения общего сообщения.
Существуют некоторые методы проверки данных для улучшения проверки ошибок и способов передачи сообщений об ошибках пользователю.
DbContext имеет переопределенный метод, называемый ValidateEntity. Когда вы вызываете SaveChanges, Entity Framework вызывает этот метод для каждого объекта в его кэше, состояние которого не является неизменным. Вы можете поместить логику проверки прямо здесь, как показано в следующем примере для объекта Student.
public partial class UniContextEntities : DbContext { protected override System.Data.Entity.Validation .DbEntityValidationResult ValidateEntity(DbEntityEntry entityEntry, System.Collections.Generic.IDictionary<object, object> items) { if (entityEntry.Entity is Student) { if (entityEntry.CurrentValues.GetValue<string>("FirstMidName") == "") { var list = new List<System.Data.Entity .Validation.DbValidationError>(); list.Add(new System.Data.Entity.Validation .DbValidationError("FirstMidName", "FirstMidName is required")); return new System.Data.Entity.Validation .DbEntityValidationResult(entityEntry, list); } } if (entityEntry.CurrentValues.GetValue<string>("LastName") == "") { var list = new List<System.Data.Entity .Validation.DbValidationError>(); list.Add(new System.Data.Entity.Validation .DbValidationError("LastName", "LastName is required")); return new System.Data.Entity.Validation .DbEntityValidationResult(entityEntry, list); } return base.ValidateEntity(entityEntry, items); } }
В указанном выше методе ValidateEntity свойства Student Entity FirstMidName и LastName проверяются, если какое-либо из этих свойств имеет пустую строку, а затем возвращает сообщение об ошибке.
Давайте рассмотрим простой пример, в котором создается новый студент, но FirstMidName студента — это пустая строка, как показано в следующем коде.
class Program { static void Main(string[] args) { using (var context = new UniContextEntities()) { Console.WriteLine("Adding new Student to the database"); Console.WriteLine(); try { context.Students.Add(new Student() { FirstMidName = "", LastName = "Upston" }); context.SaveChanges(); } catch (DbEntityValidationException dbValidationEx) { foreach (DbEntityValidationResult entityErr in dbValidationEx.EntityValidationErrors) { foreach (DbValidationError error in entityErr.ValidationErrors) { Console.WriteLine("Error: {0}",error.ErrorMessage); } } } Console.ReadKey(); } } }
Когда приведенный выше пример скомпилирован и выполнен, вы получите следующее сообщение об ошибке в окне консоли.
Adding new Student to the database Error: FirstMidName is required
Мы рекомендуем выполнить вышеприведенный пример пошагово для лучшего понимания.