2010-07-06 1 views
0

У меня есть контекст Linq-to-SQL с изменениями в EntitySet. Я хочу избавиться от всех изменений, которые я сделал с ним, так как я последний раз вызывал SubmitChanges(). Я использую следующий метод, чтобы восстановить состояние контекста:Возврат изменений в EntitySet <T> в Linq-to-SQL

public static void RevertChanges(this DataContext context) 
{ 
    var changeSet = context.GetChangeSet(); 
    var inserts = changeSet.Inserts.ToList(); 
    var deleteAndUpdate = changeSet.Deletes.Concat(changeSet.Updates).ToList(); 

    foreach (var inserted in inserts) 
    { 
     var table = context.GetTable(inserted.GetType()); 
     table.DeleteOnSubmit(inserted); 
    } 

    if (deleteAndUpdate.Count > 0) 
    { 
     context.Refresh(RefreshMode.OverwriteCurrentValues, deleteAndUpdate); 
    } 
} 

Это работает отлично, за исключением того, что EntitySet на основе таблицы, не освежиться, и сохраняет изменения в нем.

Каков наилучший способ отклонить изменения в EntitySet?

ответ

3

Лучший способ?

using (DataContext dc = new DataContext) 
{ 

} 

Это единственный способ быть уверенным.

Второй наилучший вариант - это создать новый EntitySet и присвоить его свойству - то же самое делается в файле designer.cs.

+0

Ugh. Это сложно из-за использования DataContext. Я ищу способ избежать этого. – codekaizen

+0

Эй, спасибо за второй вариант - это выглядит многообещающим. Как обновить объекты в EntitySet после его воссоздания? – codekaizen

+0

Хорошо, я решил это, выпустив запрос по контексту и заполнив EntitySet вручную. – codekaizen