我有一个Linq-to-SQL上下文,其中包含EntitySet中的更改。自从我上次调用SubmitChanges()
以来,我想摆脱我对它所做的所有更改。我使用以下方法来恢复上下文的状态:
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
答案 0 :(得分:3)
最好的方法?
using (DataContext dc = new DataContext)
{
}
这是确定的唯一方法。
第二个最佳选择是新建一个EntitySet并将其分配给属性 - 在designer.cs文件中也是如此。