2010-10-15 14 views
6

Mam dość proste pytanie, na które nie mogę znaleźć odpowiedzi. Mam aplikację silverlight z usługami Ria. W klasie DomainService mam metodę aktualizacji, jak poniżej:WCF Ria Services ChangeSet.GetOriginal(): Jak to działa?

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 
    } 

Problem polega na tym, że właściwość Name jest zawsze pusta. W rzeczywistości każde pole oprócz ID ma wartości domyślne. Próbowałem już szukać sposobu działania metody GetOriginal, ale nie mogę znaleźć żadnej pomocy. Wygląda na to, że próbuje odbudować oryginalny obiekt na serwerze, na podstawie zmian, które są wysyłane z klienta na serwer.

A może ktoś zna lepszy sposób na sprawdzenie, czy pewna właściwość obiektu została zmieniona podczas aktualizacji? Mogę oczywiście porównać go do wartości w bazie danych, ale wydaje mi się, że powinienem unikać tego dodatkowego wywołania do bazy danych.

Każda pomoc jest mile widziane ponownie :-)

EDIT: tylko dowiedział się o RoundTripOriginalAttribute. Wydaje się, że to wystarczy. Czy jestem jedyną osobą, która uważa, że ​​RIA może być udokumentowana nieco lepiej?

+0

Tak. Dokumentacja na MSDN nie jest świetna. Zajrzyj do dokumentu RIA Services 1.0 z łamaniem zmian, który zawiera kilka dobrych informacji, w tym RoundTripOriginalAttribute http://code.msdn.microsoft.com/Project/Download/FileDownload.aspx?ProjectName=RiaServices&DownloadId=8313 – robertkroll

Odpowiedz

3

Cóż, szukałem również zmiany obiektu ścieżki ścieżki z EF4 i po pewnym przeszukaniu go znalazłem, że musisz zastosować atrybut "RoundTripOriginal" do właściwości obiektu, który chcesz śledzić, ponieważ RIA (domyślnie) nie wysyła oryginalnych wartości z powrotem do serwera.

nadal mam pewne obawy dotyczące tego i poprosiłem niektórych guru:

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

Ten pracował dla mnie, ale ja nadal nie sądzę jest najlepszym sposobem na wyjście z niego.

Mam nadzieję, że to pomoże.