Kerangka Kerja Entitas - Operasi Basis Data

Di bab sebelumnya, Anda telah mempelajari tiga cara berbeda untuk menentukan model data entitas.

  • Dua di antaranya, Database First dan Model First, bergantung pada desainer Entity Framework yang dikombinasikan dengan pembuatan kode.

  • Yang ketiga, Kode Pertama, memungkinkan Anda melewati perancang visual dan hanya menulis kode Anda sendiri.

  • Terlepas dari jalur mana yang Anda pilih, Anda akan mendapatkan kelas domain dan satu atau lebih kelas Entity Framework DbContext memungkinkan Anda untuk mengambil dan menyimpan data yang relevan dengan kelas tersebut.

API DbContext di aplikasi Anda digunakan sebagai jembatan antara kelas dan database Anda. DbContext adalah salah satu kelas terpenting dalam Entity Framework.

  • Ini memungkinkan untuk mengekspresikan dan mengeksekusi kueri.

  • Ini mengambil hasil kueri dari database dan mengubahnya menjadi contoh kelas model kami.

  • Itu dapat melacak perubahan pada entitas, termasuk menambah dan menghapus, dan kemudian memicu pembuatan pernyataan sisipkan, perbarui dan hapus yang dikirim ke database sesuai permintaan.

Berikut ini adalah kelas konteks iklan domain di mana kita akan melakukan operasi yang berbeda dalam bab ini. Ini adalah contoh yang sama yang telah kita buat di chapater, Database First Approach.

Implementasi Kelas Konteks

using System;
using System.Data.Entity;
using System.Data.Entity.Infrastructure;
using System.Data.Entity.Core.Objects;
using System.Linq;

namespace DatabaseFirstDemo {

   public partial class UniContextEntities : DbContext {

      public UniContextEntities(): base("name = UniContextEntities") {}

      protected override void OnModelCreating(DbModelBuilder modelBuilder) {
         throw new UnintentionalCodeFirstException();
      }

      public virtual DbSet<Course> Courses { get; set; }
      public virtual DbSet<Enrollment> Enrollments { get; set; }
      public virtual DbSet<Student> Students { get; set; }
   }
}

Implementasi Kelas Domain

Kelas kursus

namespace DatabaseFirstDemo {

   using System;
   using System.Collections.Generic;
	
   public partial class Course {

      [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", 
         "CA2214:DoNotCallOverridableMethodsInConstructors")]

      public Course() {
         this.Enrollments = new HashSet<Enrollment>();
      }
	
      public int CourseID { get; set; }
      public string Title { get; set; }
      public int Credits { get; set; }
	
      [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", 
         "CA2227:CollectionPropertiesShouldBeReadOnly")]
			
      public virtual ICollection<Enrollment> Enrollments { get; set; }
   }
}

Kelas siswa

namespace DatabaseFirstDemo {

   using System;
   using System.Collections.Generic; 

   public partial class Student {

      [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", 
         "CA2214:DoNotCallOverridableMethodsInConstructors")]

      public Student() {
         this.Enrollments = new HashSet<Enrollment>();
      }

      public int ID { get; set; }
      public string LastName { get; set; }
      public string FirstMidName { get; set; }
      public System.DateTime EnrollmentDate { get; set; }

      [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", 
         "CA2227:CollectionPropertiesShouldBeReadOnly")]
			
      public virtual ICollection<Enrollment> Enrollments { get; set; }
   }
}

Kelas pendaftaran

namespace DatabaseFirstDemo {

   using System;
   using System.Collections.Generic; 

   public partial class Enrollment {

      public int EnrollmentID { get; set; }
      public int CourseID { get; set; }
      public int StudentID { get; set; }
      public Nullable<int> Grade { get; set; }
		
      public virtual Course Course { get; set; }
      public virtual Student Student { get; set; }
   }
}

Buat Operasi

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

class Program {

   static void Main(string[] args) {

      var newStudent = new Student();

      //set student name

      newStudent.FirstMidName = "Bill";
      newStudent.LastName = "Gates";
      newStudent.EnrollmentDate = DateTime.Parse("2015-10-21");
      newStudent.ID = 100;

      //create DBContext object

      using (var dbCtx = new UniContextEntities()) {

         //Add Student object into Students DBset
         dbCtx.Students.Add(newStudent);

         // call SaveChanges method to save student into database
         dbCtx.SaveChanges();
      }
   }
}

Perbarui Operasi

Mengubah objek yang ada semudah memperbarui nilai yang ditetapkan ke properti yang ingin Anda ubah dan memanggil SaveChanges. Misalnya, kode berikut ini digunakan untuk mengubah nama belakang Ali dari Khan menjadi Aslam.

using (var context = new UniContextEntities()) {

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

Hapus Operasi

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 adalah kode di mana siswa dihapus dari database yang nama depannya adalah Ali.

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

Baca Operasi

Membaca data yang ada dari database sangatlah sederhana. Berikut adalah kode di mana semua data dari tabel siswa diambil dan kemudian program akan ditampilkan dengan nama depan dan belakang siswa dalam urutan abjad.

using (var db = new UniContextEntities()) {

   var query = from b in db.Students orderby b.FirstMidName select b;
   Console.WriteLine("All All student in the database:");

   foreach (var item in query) {
      Console.WriteLine(item.FirstMidName +" "+ item.LastName);
   }

   Console.WriteLine("Press any key to exit...");
   Console.ReadKey();
}