Можно ли "отменить" обновление LINQ to SQL?

в LINQ-to-SQL если я обновляю объект в контексте, но не вызывал SubmitChanges, есть ли способ "отменить" или отказаться от этого обновления, чтобы изменения не были отправлены, когда я в конечном итоге вызываю SubmitChanges? Например, если я обновил несколько объектов, а затем решил отказаться от изменений в одном из них перед отправкой.

Часть 2: тот же вопрос для Entity Framework, v3.5

2 ответов


оба LINQ to SQL и Entity Framework будут использовать один и тот же вызов (при условии, что у вас все еще есть активный контекст):

_dbContext.Refresh(RefreshMode.OverwriteCurrentValues, yourObj);

более подходящим способом было бы рассматривать контекст как единицу работы, в этом случае у вас больше не будет активного контекста при обновлении объекта. Вы просто избавитесь от объекта, который используете в настоящее время, и получите новую копию из нового контекста.


Я думаю ,вы можете использовать.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()

очень псевдо-код, но я думаю, что он передает правильную мысль. С помощью этого метода можно также отменить одно или несколько изменений свойств без обновления всей сущности.