2012-12-20 34 views
5

Tôi đang sử dụng Ứng dụng doanh nghiệp Silverlight 5 sử dụng dịch vụ RIA để trả lại lớp POCO từ phía dịch vụ để điền vào một menu phân cấp.Silverlight POCO được các dịch vụ RIA trả về

Vấn đề ban đầu tôi gặp phải với lớp POCO là thuộc tính SubMenuItems không được chuyển qua các dịch vụ RIA mặc dù nó đã được điền ở phía dịch vụ.

gốc POCO

public class BusinessModelMenuDto 
{ 
    [Key] 
    [Required] 
    public int ID { get; set; } 
    public string TextToDisplay { get; set; } 
    public string ImageSource { get; set; } 
    public IEnumerable<BusinessModelMenuDto> SubMenuItems { get; set; } 
} 

Dịch vụ cuộc gọi

public IEnumerable<BusinessModelMenuDto> GetCabsHeirarchy() 

Tiếp theo một số nghiên cứu thêm tôi thấy rằng các [Include][Association] thuộc tính được yêu cầu trên SubMenuItems để vượt qua các dữ liệu trên. Làm điều này lần đầu tiên với Hiệp hội ID => ID không đưa ra kết quả mong muốn vì vậy tôi đã thêm thuộc tính ParentID và thay đổi mã tải của tôi để điền Khóa Ngoại như sau. Tôi cũng đã thay đổi Liên kết để ánh xạ từ ID thành ID mẹ.

Cập nhật POCO lớp

public class BusinessModelMenuDto 
{ 
    [Key] 
    [Required] 
    public int ID { get; set; } 
    public int? ParentID { get; set; } 
    public string TextToDisplay { get; set; } 
    public string ImageSource { get; set; } 
    [Include] 
    [Association("SubItems", "ID", "ParentID")] 
    public IEnumerable<BusinessModelMenuDto> SubMenuItems { get; set; } 
} 

Về phía server Tôi tải hai cấp độ của menu ở thời điểm hiện tại vì vậy các item cấp cao nhất chứa một tập hợp các subitems nhưng không có subitems thêm dưới đây mà.

Vấn đề tôi gặp phải là khi dịch vụ RIA gửi bộ sưu tập qua dây, hệ thống phân cấp đang bị xáo trộn. Tôi đã xác nhận rằng những gì tôi được trả về được cấu trúc chính xác nhưng nó không đến đúng phía khách hàng. Cấp cao nhất là OK nhưng cấp độ thứ hai (SubMenuItems) được trộn lẫn và hai cấp SubMenuItems đã xuất hiện.

Bất kỳ ý tưởng nào tôi đang làm sai? Tôi cho rằng vấn đề là với Hiệp hội hoặc thực tế là cùng một đối tượng POCO (BusinessModelMenuDto) đang được sử dụng cho nhiều cấp độ.

+0

tôi đã có một cái nhìn nhanh chóng thông qua mã của chúng tôi. Tôi không phải là chuyên gia, nhưng bất cứ nơi nào chúng tôi có cấu trúc tương tự, chúng tôi đang sử dụng Danh sách <> và không phải là một đối tượng IEnumerable <> – GarethOwen

+1

. Đối tượng cơ bản là Danh sách nhưng tôi đã thử thay đổi Thuộc tính thành ILI nhưng vẫn không hoạt động . –

+0

bạn có thể đăng phương thức truy vấn của DomainService không? – Jehof

Trả lời

2

Chúng tôi nhận thấy chúng tôi phải sử dụng Hướng dẫn cho mặt hàng Key và chỉ định giá trị duy nhất cho nó trên máy chủ trước khi chuyển lại cho khách hàng.

Vì vậy, định nghĩa lớp học của bạn sẽ trở thành:

public class BusinessModelMenuDto 
{ 
    [Key] 
    [Required] 
    public Guid ID { get; set; } 
    public Guid? ParentID { get; set; } 
    public string TextToDisplay { get; set; } 
    public string ImageSource { get; set; } 
    [Include] 
    [Association("SubItems", "ID", "ParentID")] 
    public IEnumerable<BusinessModelMenuDto> SubMenuItems { get; set; } 
} 

Sau đó, khi bạn tạo ra một nguyên tố mới thiết lập ID:

ID = Guid.NewGuid(); 
Các vấn đề liên quan