1

我有一个包装实体框架 4 数据模型的 WCF 数据服务。我正在使用 WCF 数据服务客户端库将 WPF 客户端连接到服务。

WCF 数据服务中是否可以撤消/取消对跟踪对象的更改?

场景:在 UI 中,我允许用户编辑对象。我有保存和取消按钮。如果用户选择保存,我在我的 WCF 上下文中调用 SaveChanges(),更改将通过 WCF 服务发送到数据库。如果用户单击取消,我想撤消更改并恢复为当前对象的原始属性值。

我知道 WCF 数据服务客户端库内置了更改跟踪 - 但我找不到任何方法来访问此信息。

在实体框架中,上下文支持 Refresh 方法,您可以指定 RefreshMode.StoreWins 并传入对象 - 这将有效地取消/撤消任何更改。记录在这里:http: //msdn.microsoft.com/en-us/library/bb896255.aspx

关于如何在我的客户端应用程序中的 WCF DataServices 中实现相同功能的任何建议?

克里斯欢呼

4

2 回答 2

1

我知道的唯一“解决方案”是:

var oldMergeOption = _service.MergeOption;
_service.MergeOption = MergeOption.OverwriteChanges;
try {
    _service.YourQueryable.Where(x => x.Id==oldObject.Id).Single();
} finally {
    _service.MergeOption = oldMergeOption;
}

这应该将“oldObject”的值替换为存储在 DB 中的值。但是,我不确定 Single() 返回的对象是否总是与“oldObject”相同。

于 2012-12-07T11:02:57.503 回答
0

在准备好将这些更改提交到数据库之前,我通常不会对 DataServiceContext 中的实体进行操作。我不将我的实体视为我的域模型的一部分,因此我创建了一个特定的域模型,它使用适配器和存储库类将我的模型对象调整为实体对象。这样,域模型中的所有操作都是自包含的,直到我准备好将它们提交到数据库。Ben Day 关于我所指的内容的精彩文章可以在这里找到:http: //visualstudiomagazine.com/articles/2011/04/01/pfcov_silverlight-mvvm-tips.aspx

于 2013-09-03T20:01:06.533 回答