2017-01-12 6 views
7

NopCommerce 3.8 का उपयोग, विजुअल स्टूडियो 2015 proff।नोपॉमर्स अपडेट इकाई समस्या

मैंने एक प्लगइन बनाया है जो मेरे वेब एपीआई में आराम से कॉल करने के लिए ज़िम्मेदार है जो एनओपी के लिए एक अलग डीबी का खुलासा करता है।

प्रक्रिया एक एनओपी कार्य के माध्यम से चलायी जाती है, यह सफलतापूर्वक डेटा को वापस खींचती है और मैं फिट बैठता हूं और मैनिपुलेट कर सकता हूं क्योंकि मैं फिट देखता हूं, अब तक कोई समस्या नहीं है।

समस्या तब होती है जब मैं उत्पाद तालिका पर एक रिकॉर्ड अद्यतन करने का प्रयास करता हूं, मैं अद्यतन करता हूं ... लेकिन कुछ भी नहीं होता है, कोई त्रुटि नहीं।

मेरा मानना ​​है कि यह संदर्भ के कारण मेरे नए तत्काल उत्पाद वस्तु के बारे में कोई जानकारी नहीं है, हालांकि मैं अपने विशेष उदाहरण के संबंध में जो करना चाहता हूं उस पर एक खाली चित्रण कर रहा हूं।

इसी प्रकार के प्रश्न आमतौर पर "मॉडल" ऑब्जेक्ट का संदर्भ देते हैं जो विधि कॉल के पैरामीटर का हिस्सा है, "मॉडल" में विधि ToEntity है जो स्टैक में समान प्रश्न में उत्तर लगता है।

हालांकि मेरे उदाहरण में ToEntity वर्ग/विधि संभवतः नहीं है क्योंकि मेरा पैरामीटर वास्तव में उत्पादों की एक सूची है। यहां मेरा कोड स्पष्ट करने के लिए। मेरी सेवा कक्षा में RestClient.cs में

विधि

public async Task<List<T>> GetAsync() 
    { 
     try 
     { 
      var httpClient = new HttpClient(); 

      var json = await httpClient.GetStringAsync(ApiControllerURL); 

      var taskModels = JsonConvert.DeserializeObject<List<T>>(json); 

      return taskModels; 
     } 
     catch (Exception e) 
     { 
      return null; 
     } 
    } 

विधि

public async Task<List<MWProduct>> GetProductsAsync() 
    { 
     RestClient<MWProduct> restClient = new RestClient<MWProduct>(ApiConst.Products); 
     var productsList = await restClient.GetAsync(); 

     InsertSyncProd(productsList.Select(x => x).ToList()); 
     return productsList; 
    } 
private void InsertSyncProd(List<MWProduct> inserted) 
    { 
     var model = inserted.Select(x => 
     { 
      switch (x.AD_Action) 
      { 
       case "I": 
        //_productService.InsertProduct(row); 
        break; 
       case "U": 
        UpdateSyncProd(inserted); 
        ..... 

तो विधि बाँध और अद्यतन करने के लिए

private void UpdateSyncProd(List<MWProduct> inserted) 
    { 
     var me = inserted.Select(x => 
     { 
      var productEnt = _productRepos.Table.FirstOrDefault(ent => ent.Sku == x.Sku.ToString()); 
      if(productEnt != null) 
      { 
       productEnt.Sku = x.Sku.ToString(); 
       productEnt.ShortDescription = x.ShortDescription; 
       productEnt.FullDescription = x.FullDescription; 
       productEnt.Name = x.Name; 
       productEnt.Height = x.Pd_height != null ? Convert.ToDecimal(x.Pd_height) : 0; 
       productEnt.Width = x.Pd_width != null ? Convert.ToDecimal(x.Pd_width) : 0; 
       productEnt.Length = x.Pd_depth != null ? Convert.ToDecimal(x.Pd_depth) : 0; 
       productEnt.UpdatedOnUtc = DateTime.UtcNow; 
      } 
      //TODO: set to entity so context nows and can update 
      _productService.UpdateProduct(productEnt); 

      return productEnt; 
     }); 

    } 

तो जैसा कि आप देख सकते हैं, मुझे डेटा प्राप्त होता है और परिणाम के आधार पर कुछ विधि के माध्यम से डेटा पास होता है। उस सूची में जिस विधि से मैं पुन: प्रयास करता हूं, और इकाई को तालिका से खींचता हूं, फिर उस छेड़छाड़ वाली इकाई का उपयोग करके उत्पाद सेवा के माध्यम से अद्यतन करता हूं।

तो मैं यहां क्या खो रहा हूं, मुझे यकीन है कि यह 1 कदम है, और मुझे लगता है कि यह या तो हो सकता है क्योंकि 1) संदर्भ में अभी भी इकाई के बारे में कोई जानकारी नहीं है, या 2) इसकी गलत कॉल।

सारांश अद्यतन अद्यतन नहीं हो रहा है, संभावित रूप से संदर्भ के बिना संदर्भ या मेरी पद्धति गलत है। (शायद दोनों)।

अद्यतन:

मैं सभी मेरी सेवा के आसपास कुछ logger.inertlog कहा, यह सब अद्यतन की कॉल की बात करने के ठीक होकर गुजरती है। लेकिन फिर मैं उत्पाद की जांच करता हूं और व्यवस्थापक अनुभाग में कुछ भी नहीं बदला है।

plugin

मैं पूर्ण स्रोत प्रदान की है के रूप में मुझे लगता है कि शायद इस कोड को सेटअप संभवतः के बाकी के साथ कुछ करने के लिए है?

अद्यतन:

जोड़ा गया मेरी निष्पादित पद्धति पर testin के लिए निम्नलिखित।

var myprod = _productRepos.GetById(4852); 
myprod.ShortDescription = "db test"; 
productRepos.Update(myprod); 

यह सफलतापूर्वक उत्पाद विवरण अद्यतन करता है। मैंने अपनी सेवाओं से कार्य वर्ग में अपनी विधियों को स्थानांतरित कर दिया लेकिन अभी भी कोई भाग्य नहीं है। जितना अधिक मैं इसे और अधिक सोचता हूं कि मेरा एसिंक किसी भी तरह डीबी संदर्भ को मार रहा है।

+0

अरे, क्या आपने सीधे डेटाबेस में चेक किया था? वहां पर प्रदर्शित परिवर्तन? –

+0

हां, जहां अपडेट किया गया है, इसलिए मैं इसे कैश समस्या नहीं सोचता, हालांकि – lemunk

+0

कौन जानता है ठीक है, कोड अच्छा दिखता है, और जांच करने की आवश्यकता है। –

उत्तर

0

एसिंक को चालू किया और गेटबाइड को नए उत्पाद में बाध्य किया, स्विच के लिए लैम्ब्डा को भी हटा दिया और इसे फ़ोरैच लूप में बदल दिया। अंत में परिणाम अद्यतन करने के लिए लगता है।

पुष्टि नहीं कर सकता है कि एसिंक अपराधी है, वर्तमान में वेब एपीआई एक ही परिणाम लौट रहा है, भले ही डेटा बदल गया हो (कुछ नेट कैरिंग। नेट कोर में डेफल्ट द्वारा)? तो मैं इसके लिए एक नया प्रश्न बना रहा हूं।

अद्यतन: ऐसा प्रतीत होता है कि यह समस्या एसिंक की खराब डीबगिंग से उत्पन्न होती है। प्रत्येक उदाहरण मैं एक प्रतीक्षा कॉल पर फिर से प्रयास करने की कोशिश कर रहा हूं, बस एक ऐसे संग्रह पर फिर से प्रयास करने की कोशिश कर रहा हूं जो तकनीकी रूप से हो या अभी तक पूरा नहीं हो सकता है। और शायद खराब डीबगिंग के कारण, मुझे पता नहीं था।

तो उत्तर आपके संग्रह का इंतजार करें, फिर इसके बाद पुन: प्रयास करें।

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