2011-12-03 5 views
5

मुझे क्लाइंट साइड पर डेटा रीफ्रेश करने के लिए फिर से डब्ल्यूसीएफ आरआईए सेवा को कॉल करने में समस्या है। यहाँ मेरी मामला है:डब्ल्यूसीएफ रिया सेवा के साथ क्लाइंट साइड पर इकाई के उदाहरण को रीफ्रेश कैसे करें?

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

ग्राहक के पक्ष में, मैं निम्नलिखित तरीके से एक फोन करना है (यह एक बटन मैं बुलाया "ताज़ा द्वारा कॉल है:

सर्वर साइड पर, एक डोमेन सेवा कुछ की तरह है "बटन):

मान लीजिए मैं डीबी में एक व्यक्ति है डेटा के साथ कहते हैं कि personID=1, Age = 16:

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

यहाँ मैं क्या कोशिश कर रहा हूँ है।

  1. फिर ऐप चलाएं, मुझे डेटा सही तरीके से मिलता है।

  2. फिर डेटाबेस पर जाएं, Age = 20 बदलने के लिए SQL के साथ डेटा अपडेट करें।

  3. फिर ऐप पर वापस जाएं और एक नया कॉल करने के लिए "रीफ्रेश करें" बटन पर क्लिक करें, लेकिन उम्र 20 पर अपडेट नहीं की गई है, यह अभी भी 16 है।

मैं डिबग मोड में अनुप्रयोग चलाने के लिए, और डेटा की जांच:

जाँच बिंदु 1 में, मैं परिणाम में डेटा की जांच, यह ठीक, Age = 20 है।

चेक पॉइंट 2 पर, मैं result.Entities में डेटा की जांच करता हूं, डेटा को रीफ्रेश नहीं किया गया है, यह अभी भी Age = 16 है।

मैंने LoadBehavior.MergeIntoCurrent,LoadBehavior.RefreshCurrent की कोशिश की है, लेकिन कोई सफलता नहीं है।

इसलिए मुझे पूरे एसएल ऐप को पुनः लोड करने के लिए एसएल ऐप होस्ट पेज को रीफ्रेश करने की आवश्यकता है, फिर मैं नया डेटा देख सकता हूं। यह उपयोगकर्ताओं को समाप्त करने के लिए स्वीकार्य नहीं है।

मैं क्यों समझ में नहीं आता। मैं रीफ्रेश बटन पर क्लिक करते समय डेटा पकड़ने के लिए फिडलर का उपयोग करने का भी प्रयास करता हूं, डेटा को नवीनतम Age = 20 मिल गया।

इस समस्या को हल करने के लिए कैसे करें?

+0

स्पष्ट होने के लिए, जब आप ब्रेकपॉइंट सेट करते हैं तो आप क्या देखते हैं "यह। रेसप्रॉपर्टी चेंज (" व्यक्ति ");"? –

+0

क्या आप अपना सर्वर-साइड कोड डीबग कर सकते हैं, और देख सकते हैं कि वह क्या लौट रहा है? यदि इकाई को सर्वर के सत्र में कैश किया गया है, तो यह कारण हो सकता है कि डेटा अपडेट नहीं हो रहा है। साथ ही, आपको क्लाइंट पक्ष पर अपनी व्यक्तिगत संपत्ति को फिर से सेट करने की आवश्यकता नहीं है, केवल क्वेरी चलाएं, और आरआईए सेवाएं मौजूदा व्यक्ति पर आयु संपत्ति बदलती घटना को बढ़ाएंगी। – Tevin

+0

मुझे लगता है कि आपको सर्वर पक्ष में submitchanges() जोड़ना चाहिए –

उत्तर

0

सबसे पहले, क्या आप संपादन मोड में इकाई हैं? अगर आप एडिट मोड में हैं, तो आरआईए आपके बदलाव रखेगा, और जब आप इकाई को दोबारा लोड करेंगे तो मूल मानों को अपडेट करें।

आप पता लगाने के लिए अपनी व्यक्ति इकाई की IsEditing संपत्ति की जांच कर सकते हैं। और अपनी इकाई के मूल वैल्यू को जांचने का प्रयास करें। var original = Person.GetOriginal()

संबंधित मुद्दे