Могу ли я "отменить" обновление LINQ to SQL? - PullRequest
9 голосов
/ 12 августа 2010

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

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

Ответы [ 2 ]

3 голосов
/ 12 августа 2010

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

_dbContext.Refresh(RefreshMode.OverwriteCurrentValues, yourObj);

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

1 голос
/ 12 августа 2010

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...