2009-07-21 65 views
2

我的WPF应用程序中有一个组合框,它是我的视图模型中的对象列表的数据绑定。当用户更改所选对象并在保存之前选择另一个项目时,我需要清除所做的更改。如何清除LinqToSql中的更改?

我想我可以使用dataContext.GetChangeSet()。Updates.Clear()但由于某种原因集合是只读的。

我也试过使用dataContext.Refresh,但这不起作用或者因为该对象不存在于数据库中,我从SP手动创建它。

请帮忙。谢谢。

回答

2

最好的办法是重新查询到一个单独的数据上下文。你可以通过使用DeleteOnSubmit(和相反)否定插入(从变更集),但我宁愿不,我自己。

+0

所以你说基本上建立一个新的datacontext和去拿数据呢?如果是这样,那么这是非常缓慢的,因为我的收藏有很多物品。我希望有一个对象的副本保存在某处,以便可以回滚任何更改(如撤消功能)。 – HAdes 2009-07-27 14:19:40

+0

更改跟踪器中有一个旧版本;但是数据上下文的想法是它是一个工作单元;不是数据库。国际海事组织,这听起来像你只是加载太多的数据到它开始... – 2009-07-27 14:22:11

3

除了使用使用DeleteOnSubmit(或DeleteAllOnSubmit)马克的方法来删除插件,下面将实际撤销任何更新藏汉:

// clears any updates. 
ChangeSet changes = dataContext.GetChangeSet(); 
dataContext.Refresh(RefreshMode.OverwriteCurrentValues, changes.Updates);