Я могу “отменить” LINQ к обновлению SQL?

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

Часть 2: тот же вопрос для Платформы Объекта, v3.5

9
задан Sisiutl 12 August 2010 в 15:28
поделиться

2 ответа

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

_dbContext.Refresh(RefreshMode.OverwriteCurrentValues, yourObj);

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

3
ответ дан 5 December 2019 в 01:19
поделиться

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

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

1
ответ дан 5 December 2019 в 01:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: