Kerangka Kerja Entitas - Intersepsi Perintah

Di Entity Framework 6.0, ada fitur baru lainnya yang disebut Interceptoratau Intersepsi. Kode intersepsi dibangun di sekitar konsepinterception interfaces. Misalnya, antarmuka IDbCommandInterceptor mendefinisikan metode yang dipanggil sebelum EF melakukan panggilan ke ExecuteNonQuery, ExecuteScalar, ExecuteReader, dan metode terkait.

  • Entity Framework benar-benar bisa bersinar dengan menggunakan intersepsi. Dengan pendekatan ini, Anda dapat menangkap lebih banyak informasi secara sementara tanpa harus mengurai kode Anda.

  • Untuk menerapkan ini, Anda perlu membuat pencegat khusus Anda sendiri dan mendaftarkannya sesuai dengan itu.

  • Setelah kelas yang mengimplementasikan antarmuka IDbCommandInterceptor telah dibuat, kelas tersebut dapat didaftarkan dengan Entity Framework menggunakan kelas DbInterception.

  • Antarmuka IDbCommandInterceptor memiliki enam metode dan Anda perlu menerapkan semua metode ini. Berikut adalah implementasi dasar dari metode tersebut.

Mari kita lihat kode berikut di mana antarmuka IDbCommandInterceptor diimplementasikan.

public class MyCommandInterceptor : IDbCommandInterceptor {

   public static void Log(string comm, string message) {
      Console.WriteLine("Intercepted: {0}, Command Text: {1} ", comm, message);
   }

   public void NonQueryExecuted(DbCommand command, 
      DbCommandInterceptionContext<int> interceptionContext) {
         Log("NonQueryExecuted: ", command.CommandText);
   }

   public void NonQueryExecuting(DbCommand command, 
      DbCommandInterceptionContext<int> interceptionContext) {
         Log("NonQueryExecuting: ", command.CommandText);
   }

   public void ReaderExecuted(DbCommand command, 
      DbCommandInterceptionContext<DbDataReader> interceptionContext) {
         Log("ReaderExecuted: ", command.CommandText);
   }

   public void ReaderExecuting(DbCommand command, 
      DbCommandInterceptionContext<DbDataReader> interceptionContext) {
         Log("ReaderExecuting: ", command.CommandText);
   }

   public void ScalarExecuted(DbCommand command, 
      DbCommandInterceptionContext<object> interceptionContext) {
         Log("ScalarExecuted: ", command.CommandText);
   }

   public void ScalarExecuting(DbCommand command, 
      DbCommandInterceptionContext<object> interceptionContext) {
         Log("ScalarExecuting: ", command.CommandText);
   }

}

Mendaftarkan Interceptor

Setelah kelas yang mengimplementasikan satu atau lebih antarmuka intersepsi telah dibuat, kelas tersebut dapat didaftarkan dengan EF menggunakan kelas DbInterception seperti yang ditunjukkan pada kode berikut.

DbInterception.Add(new MyCommandInterceptor());

Interceptors juga bisa didaftarkan di level app-domain menggunakan konfigurasi berbasis kode DbConfiguration seperti yang ditunjukkan pada kode berikut.

public class MyDBConfiguration : DbConfiguration {

   public MyDBConfiguration() {
      DbInterception.Add(new MyCommandInterceptor());
   }
}

Anda juga dapat mengkonfigurasi file konfigurasi interceptor menggunakan kode -

<entityFramework>
   <interceptors>
      <interceptor type = "EFInterceptDemo.MyCommandInterceptor, EFInterceptDemo"/>
   </interceptors>
</entityFramework>