2010-08-12 91 views
9

在LINQ-to-SQL中,如果我在上下文中更新對象但尚未調用SubmitChanges,是否有辦法「撤消」或放棄該更新,以便在最終調用SubmitChanges時不會提交更改? 例如,如果我更新了幾個對象,然後決定在提交之前放棄對其中一個對象的更改。我可以「撤消」LINQ to SQL更新嗎?

第2部分:實體框架同樣的問題,V3.5

+0

可能的重複http://stackoverflow.com/questions/259219/how-can-i-reject-all-changes-in-a-linq-to-sqls-datacontext – relet 2010-08-12 15:31:55

+0

不,那篇文章是關於如何撤消所有更改。我只想放棄其中一些。 – Sisiutl 2010-08-12 15:38:43

回答

2

兩個LINQ to SQL和實體框架將使用相同的調用(假設你仍然有活躍的背景下):

_dbContext.Refresh(RefreshMode.OverwriteCurrentValues, yourObj); 

一更合適的方式是將Context作爲工作單元處理,在這種情況下,刷新對象時不再有活動上下文。您只需簡單地處理當前使用的對象,然後從新的上下文中獲取全新的副本。

1

我想你可以使用.GetOriginalEntityState(yourEntity)來檢索原始值。然後設置您的更新實體回原始

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

非常僞代碼,但我認爲它傳達了正確的想法。使用這種方法,您也可以撤銷一個或多個屬性更改,而無需刷新整個實體。