2012-12-20 33 views
5

मैं आरआईए सेवाओं का उपयोग कर सिल्वरलाइट 5 बिजनेस एप्लिकेशन का उपयोग कर रहा हूं ताकि सेवा पक्ष से पीओसीओ कक्षा को पदानुक्रमित मेनू को पॉप्युलेट कर सकें।आरआईए सेवाओं द्वारा लौटा सिल्वरलाइट पीओसीओ

पीओसीओ कक्षा के साथ मेरी मूल समस्या यह थी कि SubMenuItems संपत्ति आरआईए सेवाओं पर पारित नहीं हो रही थी, हालांकि यह सेवा पक्ष पर आबादी थी।

मूल 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; } 
} 

सेवा कॉल

public IEnumerable<BusinessModelMenuDto> GetCabsHeirarchy() 

कुछ आगे की जांच पड़ताल मैंने पाया कि [Include] और [Association] विशेषताओं पर डेटा पारित करने के लिए SubMenuItems पर आवश्यक थे के बाद। आईडी/एसोसिएशन आईडी के साथ पहली बार ऐसा करने से वांछित परिणाम नहीं दिए गए, इसलिए मैंने पेरेंट आईडी संपत्ति को जोड़ा और नीचे के रूप में विदेशी कुंजी को पॉप्युलेट करने के लिए अपना लोडिंग कोड बदल दिया। मैंने एसोसिएट को आईडी से पेरेंट आईडी में मैप करने के लिए भी बदल दिया।

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

सर्वर साइड मैं पल में मेनू के दो स्तर लोड हो रहा है कर रहा हूँ ताकि शीर्ष स्तर आइटम SubItems का संग्रह होता लेकिन वहाँ है कि नीचे कोई और SubItems हैं पर।

मेरी समस्या यह है कि जब आरआईए सेवाएं तार पर संग्रह भेजती हैं तो पदानुक्रम को झुकाया जा रहा है। मैंने पुष्टि की है कि जो मुझे वापस किया गया है वह सही ढंग से संरचित है लेकिन यह क्लाइंट पक्ष पर सही ढंग से नहीं पहुंचता है। शीर्ष स्तर ठीक है लेकिन दूसरा स्तर (सबमेनूइटम) मिश्रित हो गया है और दो फर्टर सबमेनूइटम स्तर दिखाई दिए हैं।

कोई विचार क्या मैं गलत कर रहा हूं? मुझे लगता है कि समस्या एसोसिएशन या तथ्य के साथ है कि एक ही पॉको ऑब्जेक्ट (BusinessModelMenuDto) का उपयोग कई स्तरों के लिए किया जा रहा है।

+0

मैं अपने कोड पर एक संक्षिप्त दृष्टि थी। मैं एक विशेषज्ञ नहीं हूं, लेकिन जहां भी हमारे पास एक समान संरचना है, हम एक सूची <> और एक आईनेमरेबल नहीं << – GarethOwen

+1

अंतर्निहित वस्तु एक सूची थी, लेकिन मैंने संपत्ति को एक IList में बदलने की कोशिश की लेकिन यह अभी भी काम नहीं कर रहा है । –

+0

क्या आप डोमेन सेवा की अपनी क्वेरी विधि पोस्ट कर सकते हैं? – Jehof

उत्तर

2

हमने पाया कि हमें आइटम Key आइटम के लिए Guids का उपयोग करना था और क्लाइंट को वापस जाने से पहले सर्वर पर एक अद्वितीय मान असाइन करना था।

तो अपने वर्ग परिभाषा बन गयी:

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

फिर जब आप बनाने के एक नए तत्व आईडी सेट:

ID = Guid.NewGuid();