2010-08-12 29 views
9

Trong LINQ to SQL nếu tôi cập nhật một đối tượng trong ngữ cảnh nhưng chưa được gọi là SubmitChanges, có cách nào để "hoàn tác" hoặc từ bỏ bản cập nhật đó để các thay đổi sẽ không được gửi khi tôi gọi SubmitChanges không? Ví dụ: nếu tôi đã cập nhật một số đối tượng và sau đó quyết định tôi muốn từ bỏ các thay đổi đối với một trong các đối tượng đó trước khi gửi.Tôi có thể "hoàn tác" bản cập nhật LINQ to SQL không?

Phần 2: cùng một câu hỏi cho Entity Framework, v3.5

+0

bản sao có thể có của http://stackoverflow.com/questions/259219/how-can-i-reject-all-changes-in-a-linq-to-sqls-datacontext – relet

+0

Không, bài viết đó là về cách hoàn tác tất cả các thay đổi. Tôi chỉ muốn từ bỏ một số trong số họ. – Sisiutl

Trả lời

2

Cả LINQ to SQL và Entity Framework sẽ sử dụng cuộc gọi tương tự (giả sử bạn vẫn có bối cảnh hoạt động):

_dbContext.Refresh(RefreshMode.OverwriteCurrentValues, yourObj); 

Một cách thích hợp hơn là xử lý bối cảnh như một đơn vị công việc, trong trường hợp đó bạn sẽ không còn có ngữ cảnh hoạt động khi làm mới đối tượng. Bạn chỉ đơn giản là vứt bỏ đối tượng bạn đang sử dụng hiện tại và nhận một bản sao mới từ một ngữ cảnh mới.

1

Tôi nghĩ bạn có thể sử dụng .GetOriginalEntityState (yourEntity) để truy xuất các giá trị ban đầu. Sau đó, hãy đặt đối tượng được cập nhật của bạn trở về ảnh gốc

dim db as new yourDataContext 
//get entity 
dim e1 as yourEntity = (from x in db.table1).take(1) 
//update entity 
e1.someProperty = 'New Value' 
//get original entity 
dim originalEntity = db.table1.getOrignalEntityState(e1) 
e1 = originalEntity 
db.submitChanges() 

Rất giả nhưng tôi nghĩ nó truyền đạt ý tưởng đúng. Sử dụng phương pháp này, bạn cũng có thể chỉ hoàn tác một hoặc nhiều thay đổi thuộc tính mà không làm mới toàn bộ thực thể.

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