मैं ऐसे बहुत से प्रोजेक्ट देख रहा हूं जिनमें रिपॉजिटरी हैं जो कि इंस्टेंस को लौटाते हैं IQueryable
। इससे अतिरिक्त फ़िल्टर और छंटाई IQueryable
अन्य कोड द्वारा की जा सकती है , जो विभिन्न SQL उत्पन्न होने पर अनुवाद करता है। मैं उत्सुक हूं कि यह पैटर्न कहां से आया और क्या यह एक अच्छा विचार है।
मेरी सबसे बड़ी चिंता यह है कि IQueryable
यह डेटाबेस में कुछ समय बाद हिट करने का एक वादा है, जब इसे एनुमरेट किया जाता है। इसका मतलब यह है कि रिपॉजिटरी के बाहर एक त्रुटि डाली जाएगी। इसका मतलब यह हो सकता है कि एक एंटिटी फ्रेमवर्क अपवाद को एप्लिकेशन की एक अलग परत में फेंक दिया गया है।
मैंने अतीत में कई एक्टिव रिजल्ट सेट्स (MARS) के साथ मुद्दों में भी भाग लिया है (विशेषकर लेनदेन का उपयोग करते समय) और यह दृष्टिकोण ऐसा लगता है कि यह अधिक बार ऐसा होगा।
डेटाबेस को रिपॉजिटरी कोड छोड़ने से पहले यह सुनिश्चित करने के लिए मैंने हमेशा अपने प्रत्येक LINQ एक्सप्रेशन के अंत में AsEnumerable
या कॉल ToArray
किया है।
मैं सोच रहा हूं कि क्या रिटर्निंग IQueryable
डाटा लेयर के लिए बिल्डिंग ब्लॉक के रूप में उपयोगी हो सकता है। मैंने कुछ बहुत असाधारण कोड देखे हैं जिसमें एक रिपॉजिटरी एक और रिपॉजिटरी को एक और बड़ा बनाने के लिए रिपॉजिटरी कहती है IQueryable
।
where
एक स्थगित करने के लिए एक खंड जोड़ते हैं IQueryable
, तो आपको केवल उस डेटा को तार पर भेजना होगा , न कि पूरे परिणाम सेट को।