Bạn có thể viết validation tùy chỉnh phía server cho bất kỳ thực thể. Để thực hiện điều này override phương thức ValidateEntity của DBContext như bên dưới:

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);
}

Như bạn nhìn thấy trong đoạn mã trên, chúng ta đang xác thực thực thể sinh viên. Nếu StudentName là để trống rồi sau đó chúng ta thêm DBValidationError vào DBEntityValidationResult. Vì vậy bất cứ khi nào bạn gọi phương thức DBContext.SaveChanges và thử lưu thực thể Student mà không có StudentName thì nó sẽ ném ra DbEntityValidationException. VD:

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);
        }
    }
}

Nguồn: Entity Framework Tutorial

Advertisements