DataServiceCollection:撤消删除外部项目



我正在寻找WCF数据服务,尤其是在DataServiceCollection中的变更跟踪实现时。

让我们考虑应用程序中的撤消场景,该方案管理博客和博客条目(每个博客都有许多博客条目)。我正在测试两种撤消操作:

  • 添加了新的博客条目(撤消操作是为了删除条目);
  • 删除了现有的博客条目(撤消操作是为了添加输入)。

此处的代码示例:

var context = new BloggingContext(new Uri("http://localhost/WCFDataServicesDemo/"));
var blogs = new DataServiceCollection<Blog>(context.Blogs.Expand(b => b.Entries), TrackingMode.AutoChangeTracking);
var blog = blogs.Where(b => b.Id == 1).Single();
// new entry
var newEntry = new BlogEntry
{
    // some blog entry's properties
};
// add new entry
blog.Entries.Add(newEntry);
// undo add
blog.Entries.Remove(newEntry);
// existing entry
var existingEntry = blog.Entries[0];
// remove existing entry
blog.Entries.Remove(existingEntry);
// undo remove
blog.Entries.Add(existingEntry);
context.SaveChanges();

第一个撤消操作(添加新条目,然后在撤消处删除)工作正常。
第二个撤消操作(删除现有条目,然后在撤消中添加)不对称地工作。

这一行:

blog.Entries.Remove(existingEntry);

在上下文的变更跟踪器中标记为Deleted的相应实体,这是正确的。但是这条线:

blog.Entries.Add(existingEntry);

对变更跟踪器(existingEntry仍处于Deleted状态)无能为力,但是,当然,将项目添加到集合中。

因此,当调用SaveChanges时,此条目将从数据库中删除,但仍在客户端的集合中。

我尝试通过在DataServiceCollection构造函数中设置回调来手动处理此撤消,但是在这里我得到了相同的不对称行为-collectionChangedCallback不发射,当我尝试添加项目时,该行为标记为Deleted

我在做什么错?
如何"还原"已删除的项目?

您可能可以使用Dictach进行撤消更改。请参阅这篇文章:http://social.msdn.microsoft.com/forums/en-us/adodotnetdataservices/thread/a944a15f-4a2f-4a2f-4a2f-424a-8222222-2222-222-222-584aad55 eak73

最新更新