Entity Framework - การตรวจสอบความถูกต้อง
ในบทนี้ให้เราเรียนรู้เกี่ยวกับเทคนิคการตรวจสอบความถูกต้องที่สามารถใช้ใน ADO.NET Entity Framework เพื่อตรวจสอบความถูกต้องของข้อมูลแบบจำลอง Entity Framework มีคุณลักษณะการตรวจสอบความถูกต้องที่หลากหลายซึ่งสามารถนำไปใช้กับอินเทอร์เฟซผู้ใช้สำหรับการตรวจสอบฝั่งไคลเอ็นต์หรือสามารถใช้สำหรับการตรวจสอบความถูกต้องทางฝั่งเซิร์ฟเวอร์
ใน Entity Framework การตรวจสอบข้อมูลเป็นส่วนหนึ่งของโซลูชันสำหรับการดักจับข้อมูลที่ไม่ดีในแอปพลิเคชัน
Entity Framework ตรวจสอบความถูกต้องของข้อมูลทั้งหมดก่อนที่จะเขียนลงในฐานข้อมูลโดยค่าเริ่มต้นโดยใช้วิธีการตรวจสอบข้อมูลที่หลากหลาย
อย่างไรก็ตาม Entity Framework มาหลังจากการตรวจสอบข้อมูลอินเทอร์เฟซผู้ใช้ ดังนั้นในกรณีนี้จำเป็นต้องมีการตรวจสอบเอนทิตีเพื่อจัดการกับข้อยกเว้นใด ๆ ที่ EF พ่นและแสดงข้อความทั่วไป
มีเทคนิคบางอย่างในการตรวจสอบข้อมูลเพื่อปรับปรุงการตรวจสอบข้อผิดพลาดและวิธีส่งข้อความแสดงข้อผิดพลาดกลับไปยังผู้ใช้
DbContext มีเมธอด Overridable ที่เรียกว่า ValidateEntity เมื่อคุณเรียกใช้ SaveChanges Entity Framework จะเรียกเมธอดนี้สำหรับแต่ละเอนทิตีในแคชที่มีสถานะไม่เปลี่ยนแปลง คุณสามารถใส่ตรรกะการตรวจสอบได้โดยตรงที่นี่ดังที่แสดงในตัวอย่างต่อไปนี้สำหรับเอนทิตีนักเรียน
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
เราขอแนะนำให้คุณดำเนินการตามตัวอย่างข้างต้นในลักษณะทีละขั้นตอนเพื่อความเข้าใจที่ดีขึ้น