2010-10-15 42 views
6

Tôi có một câu hỏi khá đơn giản mà tôi dường như không thể tìm thấy câu trả lời cho. Tôi có một ứng dụng Silverlight với Ria Services. Trong lớp DomainService tôi có phương thức cập nhật như sau:WCF Ria Services ChangeSet.GetOriginal(): Làm thế nào nó hoạt động?

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 
    } 

Vấn đề là thuộc tính Tên luôn trống. Trên thực tế, mọi trường ngoại trừ Id đều có giá trị mặc định. Tôi đã thử tìm kiếm phương thức GetOriginal hoạt động như thế nào, nhưng không thể tìm thấy bất kỳ trợ giúp nào. Dường như nó giống như nó cố gắng xây dựng lại đối tượng gốc trên máy chủ, dựa trên những thay đổi được gửi lại từ máy khách đến máy chủ.

Hoặc có thể ai đó biết cách tốt hơn để kiểm tra xem một thuộc tính nhất định của một đối tượng có bị thay đổi trong khi cập nhật không? Dĩ nhiên tôi có thể so sánh nó với giá trị trong cơ sở dữ liệu, nhưng có vẻ như tôi nên tránh cuộc gọi thêm này vào cơ sở dữ liệu.

Bất kỳ sự giúp đỡ một lần nữa được nhiều đánh giá cao :-)

EDIT: Chỉ cần phát hiện ra về RoundTripOriginalAttribute. Điều này dường như làm các trick. Tôi có phải là người duy nhất bằng cách nghĩ rằng RIA có thể được ghi lại tốt hơn một chút không?

+0

Có. Các tài liệu trên MSDN không phải là tuyệt vời. Hãy xem tài liệu thay đổi đột phá của Dịch vụ RIA 1.0 có chứa một số thông tin tốt, bao gồm RoundTripOriginalAttribute http://code.msdn.microsoft.com/Project/Download/FileDownload.aspx?ProjectName=RiaServices&DownloadId=8313 – robertkroll

Trả lời

3

Vâng, tôi cũng đang tìm cách thay đổi thực thể theo dõi với EF4 và sau một số googling tôi thấy rằng bạn cần áp dụng thuộc tính "RoundTripOriginal" cho thuộc tính của đối tượng bạn muốn theo dõi, bởi vì RIA (theo mặc định) không gửi các giá trị ban đầu trở lại máy chủ.

tôi vẫn còn có một số lo ngại về vấn đề này và tôi đã hỏi một số các bậc thầy:

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

này làm việc cho tôi, nhưng tôi vẫn không nghĩ là cách tốt nhất ra khỏi nó.

Hy vọng điều này sẽ hữu ích.

Các vấn đề liên quan