Kerangka Kerja Entitas - Entitas Terputus

Dalam bab ini, mari kita lihat bagaimana membuat perubahan pada entitas yang tidak dilacak oleh konteks. Entitas yang tidak dilacak oleh konteks dikenal sebagai entitas 'terputus'.

  • Untuk sebagian besar aplikasi tingkat tunggal, di mana antarmuka pengguna dan lapisan akses database berjalan dalam proses aplikasi yang sama, Anda mungkin hanya akan melakukan operasi pada entitas yang dilacak oleh konteks.

  • Operasi pada entitas yang terputus jauh lebih umum dalam aplikasi N-Tier.

  • Aplikasi N-Tier melibatkan pengambilan beberapa data di server dan mengembalikannya, melalui jaringan, ke mesin klien.

  • Aplikasi klien kemudian memanipulasi data ini sebelum mengembalikannya ke server untuk disimpan.

Berikut adalah dua langkah yang perlu diambil dengan grafik entitas terputus atau bahkan entitas terputus tunggal.

  • Lampirkan entitas dengan contoh konteks baru dan buat konteks sadar tentang entitas ini.

  • Tetapkan EntityStates yang sesuai untuk entitas ini secara manual.

Mari kita lihat kode berikut di mana entitas Mahasiswa ditambahkan dengan dua entitas Pendaftaran.

class Program {

   static void Main(string[] args) {

      var student = new Student {

         ID = 1001,
         FirstMidName = "Wasim",
         LastName = "Akram", 

         EnrollmentDate = DateTime.Parse("2015-10-10"), 
            Enrollments = new List<Enrollment> {

               new Enrollment{EnrollmentID = 2001,CourseID = 4022, StudentID = 1001 },
               new Enrollment{EnrollmentID = 2002,CourseID = 4025, StudentID = 1001 },
         }
      };

      using (var context = new UniContextEntities()) {

         context.Students.Add(student);
         Console.WriteLine("New Student ({0} {1}): {2}", 
            student.FirstMidName, student.LastName, context.Entry(student).State);

         foreach (var enrollment in student.Enrollments) {
            Console.WriteLine("Enrollment ID: {0} State: {1}", 
               enrollment.EnrollmentID, context.Entry(enrollment).State);
         }

         Console.WriteLine("Press any key to exit...");
         Console.ReadKey();
      }
   } 
}
  • Kode membangun instance Student baru, yang juga mereferensikan dua instance Pendaftaran baru di properti Enrollments-nya.

  • Kemudian Siswa baru ditambahkan ke konteks menggunakan metode Tambah.

  • Setelah Pelajar ditambahkan, kode menggunakan metode DbContext.Entry untuk mendapatkan akses ke informasi pelacakan perubahan yang dimiliki Kerangka Kerja Entitas tentang Pelajar baru.

  • Dari informasi pelacakan perubahan ini, properti Status digunakan untuk menuliskan status entitas saat ini.

  • Proses ini kemudian diulangi untuk setiap Pendaftaran yang baru dibuat yang dirujuk dari Siswa baru. Jika Anda menjalankan aplikasi, Anda akan menerima output berikut -

New Student   (Wasim  Akram): Added
Enrollment ID: 2001 State: Added
Enrollment ID: 2002 State: Added
Press any key to exit...

Sementara DbSet.Add digunakan untuk memberi tahu Entity Framework tentang entitas baru, DbSet.Attach digunakan untuk memberi tahu Entity Framework tentang entitas yang ada. Metode Lampirkan akan menandai entitas dalam status Tidak Berubah.

Mari kita lihat kode C # berikut di mana entitas terputus dilampirkan dengan DbContext.

class Program {

   static void Main(string[] args) {

      var student = new Student {

         ID = 1001,
         FirstMidName = "Wasim",
         LastName = "Akram",
         EnrollmentDate = DateTime.Parse("2015-10-10"), 

         Enrollments = new List<Enrollment> {
            new Enrollment { EnrollmentID = 2001, CourseID = 4022, StudentID = 1001 },
            new Enrollment { EnrollmentID = 2002, CourseID = 4025, StudentID = 1001 },
         }
			
      };

      using (var context = new UniContextEntities()) {

         context.Students.Attach(student);
         Console.WriteLine("New Student ({0} {1}): {2}", 
            student.FirstMidName, student.LastName, context.Entry(student).State);

         foreach (var enrollment in student.Enrollments) {
            Console.WriteLine("Enrollment ID: {0} State: {1}", enrollment.EnrollmentID, 
               context.Entry(enrollment).State);
         }

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

Ketika kode di atas dijalankan dengan metode Attach (), Anda akan menerima output berikut.

New Student   (Wasim  Akram): Unchanged
Enrollment ID: 2001 State: Unchanged
Enrollment ID: 2002 State: Unchanged
Press any key to exit...