กรอบเอนทิตี - ธุรกรรม

ในทุกเวอร์ชันของ Entity Framework เมื่อใดก็ตามที่คุณดำเนินการ SaveChanges()ในการแทรกอัพเดตหรือลบฐานข้อมูลเฟรมเวิร์กจะรวมการดำเนินการนั้นไว้ในธุรกรรม เมื่อคุณเรียกใช้ SaveChanges บริบทจะเริ่มต้นธุรกรรมโดยอัตโนมัติและกระทำหรือย้อนกลับขึ้นอยู่กับว่าการคงอยู่สำเร็จหรือไม่

  • ทั้งหมดนี้เป็นความโปร่งใสสำหรับคุณและคุณไม่จำเป็นต้องจัดการกับมัน

  • ธุรกรรมนี้ใช้เวลานานพอที่จะดำเนินการและเสร็จสิ้น

  • เมื่อคุณดำเนินการดังกล่าวอื่นธุรกรรมใหม่จะเริ่มขึ้น

Entity Framework 6 มีดังต่อไปนี้ -

ฐานข้อมูล BeginTransaction ()

  • เป็นวิธีการที่ง่ายและสะดวกกว่าภายใน DbContext ที่มีอยู่เพื่อเริ่มต้นและทำธุรกรรมให้กับผู้ใช้

  • ช่วยให้การดำเนินการหลายอย่างรวมกันภายในธุรกรรมเดียวกันและด้วยเหตุนี้การดำเนินการทั้งหมดจึงเกิดขึ้นหรือทั้งหมดจะถูกย้อนกลับเป็นรายการเดียว

  • นอกจากนี้ยังช่วยให้ผู้ใช้ระบุระดับการแยกสำหรับธุรกรรมได้ง่ายขึ้น

Database.UseTransaction ()

  • อนุญาตให้ DbContext ใช้ธุรกรรมซึ่งเริ่มต้นนอก Entity Framework

ลองมาดูตัวอย่างต่อไปนี้ซึ่งมีการดำเนินการหลายรายการในธุรกรรมเดียว รหัสเป็น -

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();
            }

         }
      }
   }
}
  • การเริ่มต้นธุรกรรมจำเป็นต้องเปิดการเชื่อมต่อร้านค้าที่เกี่ยวข้อง

  • ดังนั้นการเรียกใช้ DatabaseBeginTransaction () จะเปิดการเชื่อมต่อหากยังไม่ได้เปิด

  • หาก DbContextTransaction เปิดการเชื่อมต่อการเชื่อมต่อจะปิดเมื่อเรียก Dispose ()