Kerangka Kerja Entitas - DbContext

Kerangka Kerja Entitas memungkinkan Anda untuk membuat kueri, menyisipkan, memperbarui, dan menghapus data, menggunakan objek Common Language Runtime (CLR) yang dikenal sebagai entitas. Kerangka Kerja Entitas memetakan entitas dan hubungan yang ditentukan dalam model Anda ke database. Ini juga menyediakan fasilitas untuk -

  • Mewujudkan data yang dikembalikan dari database sebagai objek entitas
  • Lacak perubahan yang dilakukan pada objek
  • Tangani konkurensi
  • Menyebarkan perubahan objek kembali ke database
  • Ikat objek ke kontrol

Kelas utama yang bertanggung jawab untuk berinteraksi dengan data sebagai objek adalah System.Data.Entity.DbContext. API DbContext tidak dirilis sebagai bagian dari .NET Framework. Agar lebih fleksibel dan sering dengan merilis fitur baru ke Code First dan DbContext API, tim Entity Framework mendistribusikan EntityFramework.dll melalui fitur distribusi NuGet Microsoft.

  • NuGet memungkinkan Anda untuk menambahkan referensi ke proyek .NET Anda dengan menarik DLL yang relevan langsung ke proyek Anda dari Web.

  • Ekstensi Visual Studio yang disebut Library Package Manager menyediakan cara mudah untuk menarik rakitan yang sesuai dari Web ke dalam proyek Anda.

  • DbContext API sebagian besar ditargetkan untuk menyederhanakan interaksi Anda dengan Entity Framework.

  • Ini juga mengurangi jumlah metode dan properti yang Anda perlukan untuk mengakses tugas yang umum digunakan.

  • Dalam versi sebelumnya dari Entity Framework, tugas-tugas ini seringkali rumit untuk ditemukan dan dikodekan.

  • Kelas konteks mengelola objek entitas selama waktu proses, yang mencakup mengisi objek dengan data dari database, mengubah pelacakan, dan mempertahankan data ke database.

Mendefinisikan Kelas Turunan DbContext

Cara yang disarankan untuk bekerja dengan konteks adalah dengan mendefinisikan kelas yang berasal dari DbContext dan mengekspos properti DbSet yang mewakili kumpulan entitas yang ditentukan dalam konteks. Jika Anda bekerja dengan EF Designer, konteksnya akan dibuatkan untuk Anda. Jika Anda bekerja dengan Code First, Anda biasanya akan menulis konteksnya sendiri.

Kode berikut adalah contoh sederhana yang menunjukkan bahwa UniContext diturunkan dari DbContext.

  • Anda dapat menggunakan properti otomatis dengan DbSet seperti getter dan setter.

  • Itu juga membuat kode jauh lebih bersih, tetapi Anda tidak diharuskan menggunakannya untuk tujuan membuat DbSet ketika Anda tidak memiliki logika lain untuk diterapkan.

public class UniContext : DbContext {
   public UniContext() : base("UniContext") { }
   public DbSet<Student> Students { get; set; }
   public DbSet<Enrollment> Enrollments { get; set; }
   public DbSet<Course> Courses { get; set; }
}
  • Sebelumnya, EDM digunakan untuk menghasilkan kelas konteks yang diturunkan dari kelas ObjectContext.

  • Bekerja dengan ObjectContext agak rumit.

  • DbContext adalah pembungkus di sekitar ObjectContext yang sebenarnya mirip dengan ObjectContext dan berguna dan mudah di semua model pengembangan seperti Code First, Model First dan Database First.

Pertanyaan

Ada tiga jenis kueri yang dapat Anda gunakan seperti -

  • Menambahkan entitas baru.
  • Mengubah atau memperbarui nilai properti dari entitas yang sudah ada.
  • Menghapus entitas yang sudah ada.

Menambahkan Entitas Baru

Menambahkan objek baru dengan Entity Framework semudah membuat instance baru dari objek Anda dan mendaftarkannya menggunakan metode Add di DbSet. Kode berikut untuk saat Anda ingin menambahkan siswa baru ke database.

private static void AddStudent() {

   using (var context = new UniContext()) {

      var student = new Student {
         LastName = "Khan", 
         FirstMidName = "Ali", 
         EnrollmentDate = DateTime.Parse("2005-09-01") 
      };

      context.Students.Add(student); 
      context.SaveChanges();

   }
}

Mengubah Entitas yang Ada

Mengubah objek yang ada semudah memperbarui nilai yang ditetapkan ke properti yang ingin Anda ubah dan memanggil SaveChanges. Dalam kode berikut, nama belakang Ali telah diubah dari Khan menjadi Aslam.

private static void AddStudent() {

   private static void ChangeStudent() {

      using (var context = new UniContext()) {

         var student = (from d in context.Students
            where d.FirstMidName == "Ali" select d).Single();
         student.LastName = "Aslam";
         context.SaveChanges();

      }
   }
}

Menghapus Entitas yang Ada

Untuk menghapus entitas menggunakan Entity Framework, Anda menggunakan metode Hapus di DbSet. Hapus pekerjaan untuk entitas yang sudah ada dan yang baru ditambahkan. Memanggil Hapus pada entitas yang telah ditambahkan tetapi belum disimpan ke database akan membatalkan penambahan entitas. Entitas dihapus dari pelacak perubahan dan tidak lagi dilacak oleh DbContext. Memanggil Hapus pada entitas yang ada yang sedang dilacak perubahannya akan mendaftarkan entitas untuk dihapus saat SaveChanges dipanggil berikutnya. Contoh berikut menunjukkan contoh di mana siswa dihapus dari database yang nama depannya adalah Ali.

private static void DeleteStudent() {

   using (var context = new UniContext()) {
      var bay = (from d in context.Students where d.FirstMidName == "Ali" select d).Single();
      context.Students.Remove(bay);
      context.SaveChanges();
   }
}