2011-12-03 31 views
5

Tôi gặp sự cố khi gọi lại dịch vụ WCF RIA để làm mới dữ liệu ở phía máy khách. Đây là trường hợp của tôi:Làm cách nào để làm mới thể hiện của thực thể ở phía máy khách với dịch vụ wcf ria?

Tại phía máy chủ, một dịch vụ tên miền là một cái gì đó như:

public IQueryable<Person> GetPersonByID(int id) 
     { 
      var result = this.ObjectContext.Persons. 
       Where(e => e.PersonID == id); 
      return result; // check point 1 
     } 

Tại phía khách hàng, tôi thực hiện một cuộc gọi theo cách sau (đây là lời kêu gọi của một nút tôi gọi là "làm mới "nút):

this._amsService.Context.Load<Person>(
    this._amsService.Context.GetPersonByIDQuery(this.Person.ID), 
    LoadBehavior.RefreshCurrent, 
    result => 
    { 
     this.Person = result.Entities.FirstOrDefault(); //check point 2 
     this.RaisePropertyChanged("Person");  

    }, null); 

Dưới đây là những gì tôi đang cố gắng:

Giả sử tôi có một người trong DB với dữ liệu nói personID=1, Age = 16.

  1. Sau đó, chạy ứng dụng, tôi nhận dữ liệu đúng cách.

  2. sau đó chuyển đến cơ sở dữ liệu, cập nhật dữ liệu bằng SQL để thay đổi Age = 20.

  3. Sau đó quay lại ứng dụng và nhấp vào nút "làm mới" để thực hiện cuộc gọi mới, nhưng độ tuổi không được cập nhật thành 20, vẫn là 16.

tôi chạy các ứng dụng trong chế độ gỡ lỗi, và kiểm tra dữ liệu:

Tại thời điểm kiểm tra 1, tôi kiểm tra dữ liệu trong kết quả, nó là tốt, Age = 20.

Tại điểm kiểm tra 2, tôi kiểm tra dữ liệu trong result.Entities, dữ liệu chưa được làm mới, nó vẫn là Age = 16.

Tôi đã thử LoadBehavior.MergeIntoCurrent,LoadBehavior.RefreshCurrent nhưng không thành công.

Vì vậy, tôi cần phải làm mới trang máy chủ ứng dụng SL để tải lại toàn bộ ứng dụng SL, sau đó tôi có thể xem dữ liệu mới. Điều này không được chấp nhận đối với người dùng cuối.

Tôi không hiểu tại sao. Tôi cũng cố gắng sử dụng fiddler để nắm bắt dữ liệu khi nhấp vào nút làm mới, dữ liệu đã nhận được Age = 20 mới nhất.

Cách khắc phục sự cố này?

+0

Để rõ ràng, bạn thấy gì khi bạn đặt điểm ngắt tại "this.RaisePropertyChanged (" Person ");"? –

+0

Bạn có thể gỡ lỗi mã phía máy chủ của mình và xem mã nào đang trả về không? Nếu thực thể được lưu trữ trong một phiên ở phía máy chủ, điều này có thể là lý do dữ liệu không được cập nhật. Ngoài ra, bạn không cần thiết lập lại thuộc tính người của mình ở phía máy khách, chỉ cần chạy truy vấn và các dịch vụ RIA sẽ tăng sự kiện đã thay đổi thuộc tính tuổi trên người hiện tại. – Tevin

+0

Tôi nghĩ bạn nên thêm submitchanges() ở phía máy chủ –

Trả lời

0

Trước hết, bạn có phải là thực thể ở chế độ chỉnh sửa không? nếu thực thể của bạn đang ở chế độ Chỉnh sửa, RIA sẽ giữ các thay đổi của bạn và chỉ cập nhật các giá trị ban đầu khi bạn tải lại thực thể đó.

Bạn có thể kiểm tra thuộc tính IsEditing của thực thể Person của bạn để tìm hiểu. và cố gắng kiểm tra OriginalValue của pháp nhân của bạn. var original = Person.GetOriginal()

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