PDA

View Full Version : حرفه ای: اعتبار سنجی و یا validate کردن یک entity



all_time_programmer
دوشنبه 27 دی 1400, 14:52 عصر
به راحتی می توانیم کدهای اعتبارسنجی و یا 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>("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.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);
}
}
}



منبع: وبسایت پرووید
(https://provid.ir/course/%d8%a2%d9%85%d9%88%d8%b2%d8%b4-%d9%85%d8%aa%d9%86%db%8c-entity-framework-database-first-%d9%88-%da%a9%d8%a7%d8%b1-%d8%a8%d8%a7-%d8%af%d8%a7%d8%af%d9%87-%d9%87%d8%a7/)