Với EF6, bạn có một giao dịch mới có thể được sử dụng như:
using (var context = new PostEntityContainer())
{
using (var dbcxtransaction = context.Database.BeginTransaction())
{
try
{
PostInformation NewPost = new PostInformation()
{
PostId = 101,
Content = "This is my first Post related to Entity Model",
Title = "Transaction in EF 6 beta"
};
context.Post_Details.Add(NewPost);
context.SaveChanges();
PostAdditionalInformation PostInformation = new PostAdditionalInformation()
{
PostId = (101),
PostName = "Working With Transaction in Entity Model 6 Beta Version"
};
context.PostAddtional_Details.Add(PostInformation);
context.SaveChanges();
dbcxtransaction.Commit();
}
catch
{
dbcxtransaction.Rollback();
}
}
}
Có thực sự cần khôi phục khi mọi thứ đi ngang không? Tôi tò mò vì mô tả Cam kết có nội dung: "Cam kết giao dịch cơ bản tại cửa hàng".
Trong khi mô tả Rollback cho biết: "Quay lại giao dịch cơ bản của cửa hàng."
Điều này khiến tôi tò mò, bởi vì tôi thấy rằng nếu không gọi commit, các lệnh đã thực thi trước đó sẽ không được lưu trữ (điều này có vẻ hợp lý với tôi). Nhưng nếu đúng như vậy, thì lý do gì để gọi hàm Rollback? Trong EF5, tôi đã sử dụng TransactionScope không có chức năng Rollback (chỉ Hoàn thành), điều này có vẻ hợp lý với tôi. Vì lý do MS DTC, tôi không thể sử dụng TransactionScope nữa, nhưng tôi cũng không thể sử dụng thử bắt như ví dụ trên (tức là tôi chỉ cần Cam kết).