1

我有一個包裝實體框架4數據模型的WCF數據服務。我使用WCF數據服務客戶端庫將WPF客戶端連接到該服務。WCF數據服務更改跟蹤:如何取消保存更改並恢復到對象的原始值

是否可以在WCF數據服務中撤消/取消對跟蹤對象的更改?

方案:在UI中,我允許用戶編輯對象。我有保存和取消按鈕。如果用戶選擇保存我在我的WCF上下文中調用SaveChanges(),並通過WCF服務將更改發送到數據庫。如果用戶單擊取消,我想撤消更改並恢復爲當前對象的原始屬性值。

我知道WCF數據服務客戶端庫內置了更改跟蹤 - 但我無法找到任何訪問此信息的方式。

在Entity Framework中,上下文支持Refresh方法,您可以指定RefreshMode.StoreWins並傳遞對象 - 這將有效地取消/撤消任何更改。 記錄在這裏:http://msdn.microsoft.com/en-us/library/bb896255.aspx

有關我如何在我的客戶端應用程序中的WCF DataServices中實現相同的任何建議?

歡呼 克里斯

回答

1

唯一的「解決方案」我所知道的是:

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

這應該與存儲在數據庫中的值替換「的OLDobject」的值。但是,我不確定Single()返回的對象是否總是與「oldObject」相同。

+0

非常感謝,我會看看如果我可以得到這個工作 – Chris

+0

僅供參考:目前我使用BindingGroup BeginEdit解決此問題,CancelEdit和(ValidateWithoutUpdate和)CommitEdit。只需在DataContextChanged事件中執行BeginEdit,並在取消按鈕Click-Event中執行CancelEdit。在確定按鈕Click-Event中,先驗證驗證(ValidateWithoutUpdate),驗證成功後執行CommitEdit。 – Mark

0

我通常不會操作DataServiceContext中的實體,直到我準備將這些更改提交到數據庫。我不把我的實體作爲我的領域模型的一部分,所以我創建了一個特定的領域模型,它使用適配器和存儲庫類將我的模型對象調整爲實體對象。這樣,域模型中的所有操作都是自包含的,直到我準備將它們提交到數據庫爲止。本日精彩文章可以在這裏找到:http://visualstudiomagazine.com/articles/2011/04/01/pfcov_silverlight-mvvm-tips.aspx