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?
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