2010-08-12 3 views
9

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

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

+0

Возможный дубликат http://stackoverflow.com/questions/259219/how-can-i-reject-all-changes-in-a-linq-to-sqls-datacontext – relet

+0

Нет, эта статья рассказывает о том, как отмените все изменения. Я просто хочу отказаться от некоторых из них. – Sisiutl

ответ

2

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

_dbContext.Refresh(RefreshMode.OverwriteCurrentValues, yourObj); 

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

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() 

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

Смежные вопросы