به راحتی می توانیم کدهای اعتبارسنجی و یا validation سفارشی برای هر entity ایجاد کنیم. به منظور انجام این کار متد ValidateEntity مربوط به کلاس DbContext را شبیه به کد زیر override می کنیم.
protected override System.Data.Entity.Validation.DbEntityValidationRe sult ValidateEntity(DbEntityEntry entityEntry, System.Collections.Generic.IDictionary<object, object> items)
{
if (entityEntry.Entity is Student)
{
if (entityEntry.CurrentValues.GetValue<string>("Stude ntName") == "")
{
var list = new List<System.Data.Entity.Validation.DbValidationErr or>();
list.Add(new System.Data.Entity.Validation.DbValidationError("S tudentName", "StudentName is required"));
return new System.Data.Entity.Validation.DbEntityValidationRe sult(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);
}
}
}
منبع:وبسایت پرووید