2012-12-20 19 views
5

Hiyerarşik bir menü oluşturmak için hizmet tarafından bir POCO sınıfını döndürmek için RIA hizmetlerini kullanarak bir Silverlight 5 Business Uygulaması kullanıyorum.Silverlight POCO, RIA hizmetleri tarafından döndürüldü

POCO sınıfıyla olan asıl sorun, hizmet tarafında doldurulmuş olmasına rağmen, SubMenuItems özelliğinin DEA hizmetlerinden geçmemesiydi.

Orijinal 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; } 
} 

Ben [Include] ve [Association] nitelikleri üzerinden veri geçmesine SubMenuItems gerekli olduğunu bulduğumuz bazı daha fazla araştırma sonrasında Servis çağrı

public IEnumerable<BusinessModelMenuDto> GetCabsHeirarchy() 

. ID => ID ile ilk kez bunu yapmak istenen sonuçları vermedi, bu yüzden ParentID özelliğini ekledim ve aşağıdaki gibi Yabancı Anahtarı doldurmak için yükleme kodumu değiştirdim. Ayrıca ID'yi Ana Kimlik Kimliğine eşlemek için Ortak'ı da değiştirdim.

üst düzey öğesi subitems bir koleksiyonu içerir ama bunun altında başka subitems vardır bu yüzden şu anda menüsünün iki seviye yükleme am Sunucu tarafında POCO sınıf

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; } 
} 

güncellendi.

Sahip olduğum sorun, RIA hizmetleri toplama işlemini kablo üzerinden gönderdiğinde, hiyerarşinin iç içe geçmesidir. Döndüğüm şeyin doğru yapılandırıldığını doğruladım, ancak istemci tarafına doğru bir şekilde ulaşmıyor. Üst seviye tamam ama ikinci seviye (SubMenuItems) karıştırılır ve iki furter SubMenuItems düzeyi ortaya çıktı.

Neyi yanlış yaptığım hakkında bir fikriniz var mı? Sorunun Dernek ile mi yoksa aynı POCO nesnesinin (BusinessModelMenuDto) çoklu düzeylerde kullanılmakta olduğu varsayılıyor.

+0

Bizim kodu ile hızlı bir bakış vardı. Ben bir uzman değilim, ama benzer bir yapıya sahip olduğumuz her yerde bir Liste <> değil ve bir IEnumerable <> – GarethOwen

+1

kullanıyoruz. Altta yatan nesne bir Liste 'du ancak Mülk'ü bir IList olarak değiştirmeyi denedim ama hala çalışmıyor . –

+0

DomainService sorgu yönteminizi gönderebilir misiniz? – Jehof

cevap

2

Öğe için Key öğesinin Guids'i kullanmak ve istemciye geri gitmeden önce sunucuya benzersiz bir değer atamamız gerektiğini gördük.

Yani sınıf tanımı olacaktı:

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; } 
} 

Ardından, Yeni eleman kimliğini ayarlamak oluştururken:

ID = Guid.NewGuid();