2010-07-06 56 views
0

我有一個Linq-to-SQL上下文,其中包含EntitySet中的更改。我想擺脫自從我上次調用SubmitChanges()以來對其所做的所有更改。我用下面的方法來恢復背景下的狀態:還原對實體集的更改<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

呃。由於DataContext的使用方式,這很困難。我正在尋找一種方法來避免這種情況。 – codekaizen 2010-07-06 19:40:30

+0

嘿,感謝您的第二個選擇 - 它看起來很有前途。重新創建EntitySet後,如何刷新實體? – codekaizen 2010-07-06 20:38:56

+0

好的,我通過在上下文中發出一個查詢並手動填充EntitySet來解決它。 – codekaizen 2010-07-06 20:56:12