在LINQ-to-SQL中,如果我在上下文中更新對象但尚未調用SubmitChanges,是否有辦法「撤消」或放棄該更新,以便在最終調用SubmitChanges時不會提交更改? 例如,如果我更新了幾個對象,然後決定在提交之前放棄對其中一個對象的更改。我可以「撤消」LINQ to SQL更新嗎?
第2部分:實體框架同樣的問題,V3.5
在LINQ-to-SQL中,如果我在上下文中更新對象但尚未調用SubmitChanges,是否有辦法「撤消」或放棄該更新,以便在最終調用SubmitChanges時不會提交更改? 例如,如果我更新了幾個對象,然後決定在提交之前放棄對其中一個對象的更改。我可以「撤消」LINQ to SQL更新嗎?
第2部分:實體框架同樣的問題,V3.5
兩個LINQ to SQL和實體框架將使用相同的調用(假設你仍然有活躍的背景下):
_dbContext.Refresh(RefreshMode.OverwriteCurrentValues, yourObj);
一更合適的方式是將Context作爲工作單元處理,在這種情況下,刷新對象時不再有活動上下文。您只需簡單地處理當前使用的對象,然後從新的上下文中獲取全新的副本。
我想你可以使用.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()
非常僞代碼,但我認爲它傳達了正確的想法。使用這種方法,您也可以撤銷一個或多個屬性更改,而無需刷新整個實體。
可能的重複http://stackoverflow.com/questions/259219/how-can-i-reject-all-changes-in-a-linq-to-sqls-datacontext – relet 2010-08-12 15:31:55
不,那篇文章是關於如何撤消所有更改。我只想放棄其中一些。 – Sisiutl 2010-08-12 15:38:43