Używam aplikacji biznesowej Silverlight 5 przy użyciu usług RIA, aby zwrócić klasę POCO ze strony usługi, aby zapełnić hierarchiczne menu.Silverlight POCO zwrócony przez usługi RIA
Pierwotny problem z klasą POCO polegał na tym, że właściwość SubMenuItems nie była przekazywana przez usługi RIA, mimo że została zapełniona po stronie usługi.
Original 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; }
}
Wezwanie serwisu
public IEnumerable<BusinessModelMenuDto> GetCabsHeirarchy()
Po pewnym dalszych badań okazało się, że [Include]
i [Association]
atrybuty były wymagane na SubMenuItems przekazać dane skończona. Wykonanie tego po raz pierwszy z identyfikatorem Association ID => nie dało pożądanych rezultatów, więc dodałem właściwość ParentID i zmieniłem kod ładujący, aby wypełnić klucz obcy, jak poniżej. Zmieniłem również Associate, aby mapować z ID na Parent ID.
Updated klasa poco
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; }
}
Po stronie serwera wczytuję dwa poziomy menu w tej chwili więc element najwyższego poziomu zawiera zbiór elementów składowych, ale nie ma dalszych podpunktach poniżej tego.
Problem polega na tym, że gdy usługi RIA wysyłają kolekcję przez sieć, hierarchia jest pomieszana. Potwierdziłem, że to, co otrzymałem, jest poprawnie skonstruowane, ale nie pojawia się poprawnie po stronie klienta. Najwyższy poziom jest OK, ale drugi poziom (SubMenuItems) jest pomieszany i pojawiły się dwa kolejne poziomy SubMenuItems.
Każdy pomysł, co robię źle? Zakładam, że problem dotyczy stowarzyszenia lub faktu, że ten sam obiekt POCO (BusinessModelMenuDto) jest używany dla wielu poziomów.
miałem okiem przez naszego kodu. Nie jestem ekspertem, ale gdziekolwiek mamy podobną strukturę, używamy Listy <>, a nie IEnumerable <> – GarethOwen
Obiektem bazowym była Lista, ale próbowałem zmienić właściwość na IList , ale nadal nie działa . –
można opublikować metodę kwerendy usługi DomainService? – Jehof