اعتبار سنجی و یا validate کردن یک entity


به راحتی می توانیم کدهای اعتبارسنجی و یا validation سفارشی برای هر entity ایجاد کنیم. به منظور انجام این کار متد ValidateEntity مربوط به کلاس DbContext را شبیه به کد زیر override می کنیم.

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>("StudentName") == "")

{

var list = new List<System.Data.Entity.Validation.DbValidationError>();

list.Add(new System.Data.Entity.Validation.DbValidationError("StudentName", "StudentName is required"));

return new System.Data.Entity.Validation.DbEntityValidationResult(entityEntry, list);

}

}

return base.ValidateEntity(entityEntry, items);

}

همانطور که در کد بالا مشاهده می کنید ما در حال validate کردن Student می باشیم. اگر StudentName خالی باشد سپس یک DBValidationError به درون DBEntityValidationResult اضافه می‌کنیم. این موضوع باعث می‌شود که در زمان صدا زدن DbContext.SaveChanges و اقدام به ذخیره کردن Student بدون لحاظ شدن یک نام و یا مقدار در StudentName یک exception از نوع DbEntityValidationException ایجاد بشود. این موضوع در کد زیر نشان داده شده است.

try

{

using (var ctx = new SchoolDBEntities())

{

ctx.Students.Add(new Student() { StudentName = "" });

ctx.Standards.Add(new Standard() { StandardName = "" });

ctx.SaveChanges();

}

}

catch (DbEntityValidationException dbEx)

{

foreach (DbEntityValidationResult entityErr in dbEx.EntityValidationErrors)

{

foreach (DbValidationError error in entityErr.ValidationErrors)

{

Console.WriteLine("Error Property Name {0} : Error Message: {1}",

error.PropertyName, error.ErrorMessage);

}

}

}

منبع:وبسایت پرووید