在LINQ-to-SQL中如果我更新上下文中的对象但没有调用SubmitChanges,是否有办法“撤消”或放弃该更新,以便在我最终调用SubmitChanges时不会提交更改? 例如,如果我更新了几个对象,然后决定在提交之前放弃对其中一个的更改。
第2部分:实体框架的相同问题,v3.5
答案 0 :(得分:3)
LINQ to SQL和Entity Framework都将使用相同的调用(假设您仍然拥有活动的Context):
_dbContext.Refresh(RefreshMode.OverwriteCurrentValues, yourObj);
更合适的方法是将Context作为工作单元处理,在这种情况下,刷新对象时将不再具有活动上下文。您只需处理当前使用的对象,并从新的上下文中获取新的副本。
答案 1 :(得分: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()
非常伪代码,但我认为它传达了正确的想法。使用此方法,您还可以撤消一个或多个属性更改,而无需刷新整个实体。