2010-10-15 42 views
6

我有一個相當簡單的問題,我似乎無法找到答案。我有一個Ria Services的Silverlight應用程序。在類的DomainService我有類似下面的更新方法:WCF Ria服務ChangeSet.GetOriginal():它是如何工作的?

public void UpdateConversationState(ConversationState currentConversationState) 
    { 
     var original = ChangeSet.GetOriginal(currentConversationState); 
     if (original != null) 
      ObjectContext.ConversationStatesRepository.AttachAsModified(currentConversationState, original); 
     else 
      ObjectContext.ConversationStatesRepository.Attach(currentConversationState); 
     currentConversationState.UpdDat = DateTime.Now; 
     if(original.Name != currentConversationState.Name) 
      //Do something extra 
    } 

的問題是,Name屬性始終是空的。事實上,除Id以外的每個字段都有默認值。我試着搜索GetOriginal方法是如何工作的,但找不到任何幫助。在我看來,它似乎試圖根據從客戶端發送回服務器的更改來重建服務器上的原始對象。

或者,也許任何人都知道一個更好的方法來檢查更新過程中對象的某個屬性是否被更改?我可以將它與數據庫中的值進行比較,但似乎我應該避免對數據庫進行額外的調用。

任何幫助再次非常感謝:-)

編輯: 只是發現了關於RoundTripOriginalAttribute。這似乎有伎倆。我是唯一一個認爲RIA可以被證明更好一點的方式嗎?

+0

是的。 MSDN上的文檔不是很好。看一看RIA Services 1.0破解文檔,其中包含一些很好的信息,包括RoundTripOriginalAttribute http://code.msdn.microsoft.com/Project/Download/FileDownload.aspx?ProjectName=RiaServices&DownloadId=8313 – robertkroll 2010-10-20 14:28:13

回答

3

那麼,我一直在尋找一種跟蹤EF4實體更改的方法,並且在搜索一些Google之後,我發現您需要將「RoundTripOriginal」屬性應用於要跟蹤的實體的屬性,因爲RIA(默認情況下)不會將原始值發送回服務器。

我仍然有一些這方面的顧慮,我問了一些大師:

http://forums.silverlight.net/forums/t/218332.aspx

這爲我工作,但我還是鴕鳥政策覺得出來的最好的辦法。

希望這會有所幫助。