Sơ lược về Validation API trong Entity Framework

Khi sử dụng Entity Framework (EF), trước khi dữ liệu được lưu xuống CSDL, EF luôn luôn kiểm tra xem dữ liệu đó có thỏa có quy định đưa ra hay không. DbContext trong EF đưa việc kiểm định (validation) này vào trong hệ thống được đặt tên là Validation API. Validation API có thể tự động (hoặc theo nhu cầu) kiểm định tất cả các quy định (rule) mà bạn đã định nghĩa trước đó thông qua các cơ chế mà nó có thể nhận biết được. Hệ thống API này tận dụng khả năng củaValidationAttribute và IValidatableObject có trong .NET 4. Việc kiểm định ở tầng dữ liệu (data layer) là một thành phần quan trọng của các ứng dụng tập trung vào dữ liệu. Trong khi ở phía client hoặc tầng nghiệp vụ (business layer), bạn có thể có ít nhất là 1 phần kiểm định trước khi dữ liệu được đẩy xuống CSDL. Trong những trường hợp nơi phần kiểm định phía client được thực thi trong một ứng dụng web mà phụ thuộc vào việc bật hay tắt hỗ trợ JavaScript ở trình duyệt thi việc kiểm định ở tầng dữ liệu đóng môt vai trò rất quan trọng nếu người không cho phép JavaScript ở phía client.

Validation API kiểm tra các quy định theo các cách sau:

  • Những quy định cho các thuộc tính mà bạn định nghĩa sử dụng Data Annotation hoặc Fluent API.
  • Những thuộc tính kiểm định (validation attribute) tùy chọn có thể được định nghĩa cho các thuộc tính (property) hoặc kiểu (type).
  • Những quy định được định nghĩa trong phương thức Validate của bất kì lớp mô hình (model class) nào thực thi interface IValidatableObject.
  • Những ràng buộc quan hệ được định nghĩa rõ ràng trong mô hình.
  • Ngoài ra, bạn có thể thêm vào các kiểm định khác vào quy trình kiểm định.

Có một số cách để DbContext thực hiện việc kiểm định:

  • Mặc định, việc kiểm định sẽ được thực hiện trên tất cả các đối tượng được đánh dấu theo dõi là Added và Modified khi bạn gọi phương thức SaveChanges.
  • Phương thức DbEntityEntry.GetValidationResult sẽ thực thi việc kiểm định trên một đối tượng.
  • DbEntityEntry có cách để kiểm định một thuộc tính đơn lẻ.
  • DbContent.GetValidationErrors sẽ lặp thông qua từng đối tượng có trạng thái đang được theo dõi là Added hoặc Modified bởi DbContext và kiểm định từng đối tượng.

Phần gốc của tất cả các phương thức kiểm định này là phương thứcDbEntityEntry.GetValidationResult kiểm định các quy định được định nghĩa trong các thuộc tính và interface IValidatableObjectsGetValidationErrors gọiValidateEntity trên từng đối tượng được theo dõi trả về trong lời gọiGetValidationResultSaveChanges gọi GetValidationErrors nghĩa là việc kiểm định xảy ra tự động bất kể khi nào SaveChanges được gọi.

validation_api_ef_overview

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s