Entity Framework - İşlem

Entity Framework'ün tüm sürümlerinde, her çalıştırdığınızda SaveChanges()Veritabanını eklemek, güncellemek veya silmek için, çerçeve bu işlemi bir işlemde sarmalayacaktır. SaveChanges'ı çağırdığınızda, içerik otomatik olarak bir işlemi başlatır ve kalıcılığın başarılı olup olmamasına bağlı olarak onu taahhüt eder veya geri alır.

  • Bunların hepsi sizin için şeffaftır ve bununla asla uğraşmanıza gerek kalmaz.

  • Bu işlem, yalnızca işlemi yürütmek için yeterince uzun sürer ve ardından tamamlanır.

  • Bu tür başka bir işlemi gerçekleştirdiğinizde, yeni bir işlem başlar.

Entity Framework 6 aşağıdakileri sağlar -

Database.BeginTransaction ()

  • Kullanıcılar için işlemleri başlatmak ve tamamlamak için mevcut bir DbContext içinde basit ve daha kolay bir yöntemdir.

  • Birkaç işlemin aynı işlem içinde birleştirilmesine izin verir ve bu nedenle, hepsi tamamlanır veya tümü tek bir işlem olarak geri alınır.

  • Ayrıca, kullanıcının işlem için yalıtım düzeyini daha kolay belirlemesine olanak tanır.

Database UseTransaction ()

  • DbContext'in Entity Framework dışında başlatılan bir işlemi kullanmasına izin verir.

Tek bir işlemde birden çok işlemin gerçekleştirildiği aşağıdaki örneğe bir göz atalım. Kod şu şekildedir:

class Program {

   static void Main(string[] args) {

      using (var context = new UniContextEntities()) {

         using (var dbContextTransaction = context.Database.BeginTransaction()) {

            try {

               Student student = new Student() {
                  ID = 200, 
                  FirstMidName = "Ali", 
                  LastName = "Khan", 
                  EnrollmentDate = DateTime.Parse("2015-12-1")
               };

               context.Students.Add(student);

               context.Database.ExecuteSqlCommand(@"UPDATE Course SET Title = 
                  'Calculus'" + "WHERE CourseID = 1045");

               var query = context.Courses.Where(c ⇒ c.CourseID == 1045);

               foreach (var item in query) {
                  Console.WriteLine(item.CourseID.ToString()
                     + " " + item.Title + " " + item.Credits);
               }

               context.SaveChanges();
               var query1 = context.Students.Where(s ⇒ s.ID == 200);

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

               dbContextTransaction.Commit();
            } catch (Exception) {
               dbContextTransaction.Rollback();
            }

         }
      }
   }
}
  • Bir işleme başlamak, temeldeki mağaza bağlantısının açık olmasını gerektirir.

  • Bu nedenle, Database.BeginTransaction () işlevini çağırmak, zaten açık değilse bağlantıyı açacaktır.

  • DbContextTransaction bağlantıyı açtıysa, Dispose () çağrıldığında kapatacaktır.