กรอบเอนทิตี - ธุรกรรม
ในทุกเวอร์ชันของ 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 ()