WCF数据服务更改跟踪:如何取消保存更改并还原为对象的原始值

时间:2012-10-26 07:51:14

标签: wcf entity-framework wcf-data-services odata change-tracking

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

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

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

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

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

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

欢呼声 克里斯

2 个答案:

答案 0 :(得分: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"相同。

答案 1 :(得分:0)

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