Kerangka Kerja Entitas - Validasi

Dalam bab ini mari kita belajar tentang teknik validasi yang dapat digunakan dalam ADO.NET Entity Framework untuk memvalidasi data model. Entity Framework menyediakan berbagai macam fitur validasi yang dapat diimplementasikan ke antarmuka pengguna untuk validasi sisi klien atau dapat digunakan untuk validasi sisi server.

  • Di Entity Framework, validasi data adalah bagian dari solusi untuk menangkap data buruk dalam aplikasi.

  • Entity Framework memvalidasi semua data sebelum ditulis ke database secara default, menggunakan berbagai metode validasi data.

  • Namun, Entity Framework muncul setelah validasi data antarmuka pengguna. Jadi dalam hal ini diperlukan validasi entitas untuk menangani pengecualian apa pun yang dilemparkan EF dan menampilkan pesan umum.

  • Ada beberapa teknik validasi data untuk meningkatkan pemeriksaan kesalahan Anda dan bagaimana mengirimkan pesan kesalahan kembali ke pengguna.

DbContext memiliki metode Overridable yang disebut ValidateEntity. Saat Anda memanggil SaveChanges, Entity Framework akan memanggil metode ini untuk setiap entitas di cache yang statusnya tidak berubah. Anda dapat meletakkan logika validasi langsung di sini seperti yang ditunjukkan pada contoh berikut untuk Entitas Mahasiswa.

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

Dalam metode ValidateEntity di atas, properti FirstMidName dan LastName entitas mahasiswa diperiksa jika salah satu properti ini memiliki string kosong, maka itu akan mengembalikan pesan kesalahan.

Mari kita lihat contoh sederhana di mana siswa baru dibuat, tetapi FirstMidName siswa adalah string kosong seperti yang ditunjukkan pada kode berikut.

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

Ketika contoh di atas dikompilasi dan dijalankan, Anda akan menerima pesan kesalahan berikut di jendela konsol.

Adding new Student to the database  
Error: FirstMidName is required

Kami menyarankan Anda untuk menjalankan contoh di atas dengan cara langkah demi langkah untuk pemahaman yang lebih baik.