12

मैं IQueryable और आलसी लोडिंग/प्रश्नों के स्थगित निष्पादन के बारे में सीख रहा हूं।IQueryable ओवर डब्ल्यूसीएफ सेवा

क्या डब्ल्यूसीएफ पर इस कार्यक्षमता का खुलासा करना संभव है? मैं एक LINQ-to-SQL सेवा का पर्दाफाश करना चाहता हूं जो एक IQueryable लौटाता है जिसे मैं क्लाइंट पर अतिरिक्त क्वेरी कर सकता हूं, और अंततः .olist() का उपयोग करके निष्पादित कर सकता हूं। ओडीटा प्रारूप इस संदर्भ में बिल्कुल लागू है?

यदि संभव हो, तो इस तकनीक के लिए शब्द क्या है और मैं कुछ अच्छे ट्यूटोरियल क्या कर सकता हूं? धन्यवाद।

+0

सिल्वरलाइट के लिए आप डब्ल्यूसीएफ आरआईए सेवाओं का उपयोग कर सकते हैं – RichardOD

उत्तर

11

के साथ चारों ओर पारित नहीं हो सकता आप WCF Data Services जो आप क्लाइंट पर LINQ क्वेरी को परिभाषित करने की अनुमति देगा की जाँच करनी चाहिए नहीं है। डब्ल्यूसीएफ डाटा सर्विसेज शायद आपकी आवश्यकता के लिए एकमात्र समाधान है।

IQueryable अभी भी केवल इंटरफ़ेस है और कार्यक्षमता इंटरफ़ेस को लागू करने वाले प्रकार पर निर्भर करती है। आप सीधे लिंक-टू-एसक्यूएल या लिंक-टू-एंटिटीज प्रश्नों का पर्दाफाश नहीं कर सकते हैं। छोटे जीवित संदर्भ या क्रमिकरण जैसे कई कारण हैं जो क्वेरी निष्पादित करेंगे ताकि क्लाइंट क्वेरी के बजाए सभी ऑब्जेक्ट्स की सूची प्राप्त कर सके।

+0

धन्यवाद, यह वही है जो मैं ढूंढ रहा था। – Trust

1

जहाँ तक मुझे पता है, DataContext serializable अर्थ है कि आप इसे WCF

1

आप http://interlinq.codeplex.com/ का उपयोग कर सकते हैं जो आपको डब्ल्यूसीएफ पर लिंक क्वेरी भेजने की अनुमति देता है।

डब्ल्यूसीएफ डाटा सर्विसेज केवल वेबहट्प बाइंडिंग के साथ उपयोग कर सकते हैं और सभी लिंक प्रश्नों को व्यक्त नहीं किया जा सकता है। - प्रश्नों लेखन जब WCF डाटा सेवा प्रयोग किया जाता है इतना आकर्षक नहीं है जैसे स्ट्रिंग भाव की आवश्यकता है:

.AddQueryOption("$filter", "Id eq 100"); 
0

मैं एक ही सवाल के साथ संघर्ष कर रहा है, और महसूस किया कि एक अच्छी तरह से गठन सवाल एक समस्या हल है।

IQueryable मूल रूप से आपके डीबी कॉल पर भेजने से पहले क्वेरी को फ़िल्टर करने में काम करता है, इसलिए 1000 रिकॉर्ड प्राप्त करने और केवल 10 फ़िल्टर करने के बजाय, आप उन 10 को शुरू करने के लिए प्राप्त करते हैं। वह फ़िल्टरिंग आपकी सेवा परत से संबंधित है, लेकिन यदि आप एक एपीआई बना रहे हैं तो मुझे लगता है कि आप इसे अपने यूआरएल में एंड/या पैरामीटर के साथ मैप करेंगे।

http: // {host}/{entity}/q? Name = john & आयु = 21।

तो तुम कुछ इस तरह के साथ अंत:

Filter:Column1=Value1 > http://{host}/{entity}q?column1=value1 > SELECT * 
                    FROM Entity 
                    WHERE Column1=Value1 

MVC     > WCF         > DB 

आप एक बहुत अच्छा नमूना [here]

अन्त में, WCF से अपने पेलोड सबसे अधिक संभावना हो जाएगा के बाद से एक JSON पा सकते हैं, तो आप एक संग्रह के अंदर अपने डोमेन मॉडल में उन्हें deserialize कर सकते हैं (और चाहिए)। यह तब तक है जब पेजिंग होनी चाहिए, इसलिए मैं कुछ डब्ल्यूसीएफ कैशिंग (और इसके HTTP के बाद से, यह वास्तव में सरल है) की सिफारिश करेगा। तुम अब भी WebApp तरफ LINQ का उपयोग किया जाएगा, बस w/ओ "कहाँ" LINQ खंड (जब तक आप गतिशील रूप से ऊपर दिया गया URL व्यक्त बनाना चाहते हैं?)

एक जटिल या क्वेरी के लिए, आप बुरा एकाधिक WCF के साथ खत्म प्रश्नों (1 प्रति "और") और फिर उन सब को एक साथ जोड़

-1

तो इसे भेजने के लिए संभव है IQuerable <> WCF से अधिक यह एक अच्छी बात सुरक्षा बुद्धिमान नहीं है, IQuerable < के बाद से> डेटाबेस के लिए कनेक्शन स्ट्रिंग की तरह सामान का खुलासा कर सकता है । हालांकि पिछली टिप्पणियों में से कुछ आशाजनक प्रतीत होती है।

+0

"यह सुरक्षा अच्छी बात नहीं है" ... क्या यह 'IQueryable' विशिष्ट तरीके से लागू नहीं होता है? – Crono

1

https://remotelinq.codeplex.com/ एक और विकल्प है। लेकिन यह वर्तमान असेंबली स्कैन करने और उन्हें क्रमबद्ध करने के लिए ऐपडोमेन में काम करता है। यह तकनीक WinRT के लिए उपयुक्त नहीं है क्योंकि WinRT ऐप

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