2008-11-18 7 views
6

जब मैं दो बार एक ही प्रश्न करता हूं, दूसरी बार यह नई पंक्तियों को वापस नहीं करता है डेटाबेस (मुझे लगता है कि यह सिर्फ कैश का उपयोग करता है)।मैं लिंक से एसक्यूएल को कैश का उपयोग न करने के लिए कैसे मजबूर कर सकता हूं?

यह एक विंडोज़ फॉर्म एप्लिकेशन है, जहां मैं डेटा शुरू होने पर डेटा कॉन्टेक्स्ट बना देता हूं।

मैं लिंक से एसक्यूएल को कैश का उपयोग न करने के लिए कैसे मजबूर कर सकता हूं? यह देखते हुए कि कैशिंग और पहचान प्रबंधन है किस संदर्भ आप देता है के सबसे यह वास्तव में -

public IEnumerable<Orders> NewOrders() 
{ 
    return from order in dataContext.Orders 
      where order.Status == 1 
      select order; 
} 

उत्तर

9

सबसे आसान तरीका है एक नया DataContext उपयोग करने के लिए होगा:

यहाँ मैं कहाँ समस्या है एक नमूना समारोह है लगता है जैसे आप सिर्फ एक नया संदर्भ चाहते हैं। आप सिर्फ एक बनाना क्यों चाहते थे और फिर उस पर पकड़ लेंगे?

वैसे, आपके जैसे साधारण प्रश्नों के लिए इसे और अधिक पठनीय (IMO) है क्वेरी भाव विस्तार के तरीकों के बजाय साथ उपयोग करने के लिए "सामान्य" सी #:

public IEnumerable<Orders> NewOrders() 
{ 
    return dataContext.Orders.Where(order => order.Status == 1); 
} 

संपादित करें: यदि आप कभी नहीं के लिए यह चाहते हैं परिवर्तनों को ट्रैक करें, फिर कुछ भी करने से पहले ObjectTrackingEnabled को झूठी पर सेट करें। हालांकि, यह गंभीरता से इसकी उपयोगिता को सीमित कर देगा। आप स्विच को पीछे और आगे नहीं फिसल सकते हैं (बीच में प्रश्न पूछे गए हैं)। सिंगलटन संदर्भ से बचने के लिए अपने डिजाइन को बदलना बेहतर होगा, आईएमओ।

+0

यह मेरे लिए एक और डेटा कॉन्टेक्स्ट का उपयोग करने के लिए प्रमुख रिफैक्टरिंग पर है, क्योंकि यह एक फ्रेमवर्क लाइब्रेरी में लपेटा गया है। –

+0

ठीक है, यह मूल रूप से आपको क्या करना है। जब पहले किए गए खराब डिजाइन निर्णय का सामना करना पड़ता था, तो मुझे आमतौर पर यह लगता है कि यह आपकी आस्तीन को रोल करने के लिए * बेहतर * बेहतर है और इसे ठीक करने के लिए कठिन और कठिन बनाने के लिए इसे ठीक करने के लिए बेहतर है। –

+0

अच्छा ... यह एक विकल्प नहीं है। –

0

इससे कोई फर्क नहीं पड़ता कि आप डेटा कॉन्टेक्स्ट में ऑब्जेक्ट कैसे जोड़ते हैं, यह भविष्य के प्रश्नों में शामिल किया जाएगा या नहीं।

स्मृति में भविष्य के लिए नए InventoryTransaction नहीं जोड़ेगा प्रश्नों

इस उदाहरण में मैं एक आईडी के साथ एक वस्तु जोड़ रहा है और फिर संदर्भ में जोड़ने।

var transaction = new InventoryTransaction() 
       { 
        AdjustmentDate = currentTime, 
        QtyAdjustment = 5, 
        InventoryProductId = inventoryProductId 
       }; 

dbContext.InventoryTransactions.Add(transaction); 
dbContext.SubmitChanges(); 

Linq करने वाली एसक्यूएल पर्याप्त चतुर InventoryTransactions में स्मृति मदों में की पहले से कैश की गई सूची में जोड़ा जा करने की जरूरत के रूप में देख सकता नहीं है।

स्मृति में भविष्य के लिए नए InventoryTransaction जोड़ देगा प्रश्नों

var transaction = new InventoryTransaction() 
       { 
        AdjustmentDate = currentTime, 
        QtyAdjustment = 5 
       }; 

inventoryProduct.InventoryTransactions.Add(transaction); 
dbContext.SubmitChanges(); 

जहाँ भी संभव हो उपयोग में Linq करने वाली एसक्यूएल संग्रह जब रिश्ते बनाने और नहीं आईडी।

जॉन के अनुसार, जितना संभव हो सके डेटाकॉन्टेक्स्ट के दायरे को कम करने का प्रयास करें।

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

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