5

Tôi không rõ liệu tôi có cần sử dụng TransactionScope hay DbContext.SaveChanges() là đủ để thực hiện giao dịch của tôi bao gồm nhiều hoạt động CRUD. Tôi đang sử dụng SQL Server trong backend.EF5 DbContext.SaveChanges có xử lý giao dịch commit và rollback không?

+1

Liên quan: http://stackoverflow.com/questions/6028626/ef-code-first-dbcontext-and-transactions –

Trả lời

8

Nếu bạn đang gọi SaveChanges() nhiều lần và muốn khôi phục tất cả những thay đổi đó, có bạn sẽ muốn sử dụng số TransactionScope. Nếu bạn đang gọi SaveChanges() một lần trong ngữ cảnh, tất cả các thay đổi của bạn sẽ được đẩy đến cơ sở dữ liệu cùng một lúc trong giao dịch đằng sau hậu trường.

+0

Chỉ cần xác nhận cần thiết cho trường hợp sau: Trong trường hợp tôi gọi SaveChanges() một lần cho nhiều CRUD hoạt động, tôi phải vứt bỏ đối tượng DbContext để khôi phục giao dịch. – Jas

+0

Tôi không nghĩ rằng việc xử lý 'DbContext' sẽ quay trở lại giao dịch. Nếu đó là trường hợp bạn có thể muốn xem xét các tùy chọn quá tải cho 'SaveChanges()' mà bạn có thể vô hiệu hóa cam kết tự động của giao dịch và bạn sẽ chịu trách nhiệm gọi 'AcceptAllChanges()'. http://msdn.microsoft.com/en-us/library/bb739065.aspx –

+0

Nhưng liên kết msdn mà bạn cung cấp cho biết rằng ObjectContext.SaveChanges() api hiện đã lỗi thời. Ngoài ra, ObjectContext.SaveChanges() sẽ khôi phục toàn bộ giao dịch trong trường hợp ngoại lệ được SQL Server ném ra. Ngoài ra, không có cách nào đơn giản hơn để khôi phục các hoạt động CRUD của tôi bằng DbContext? – Jas

Các vấn đề liên quan