2009-04-01 11 views
9

का उपयोग करते समय केवल पढ़ने योग्य वर्ग गुणों को अनदेखा करें, किसी ऑब्जेक्ट पर परिणाम सेट बाध्य करते समय, मैं विशिष्ट गुणों या सभी पाठक गुणों को अनदेखा करने के लिए LINQ डेटा संदर्भ कैसे कहूं?DataContext.ExecuteQuery <T>

मैं कुछ टी-एसक्यूएल स्टेटमेंट्स के साथ काम कर रहा हूं जो LINQ का उपयोग करके व्यक्त करना मुश्किल है, इसलिए मैं डेटाबेस के सीधे टी-एसक्यूएल को पास करने के लिए डेटा संदर्भ के ExecuteQuery विधि का उपयोग कर रहा हूं।

यदि मेरी कक्षा टी में कोई भी पाठक गुण है, तो मुझे रनटाइम पर अपवाद मिलते हैं जब डेटा संदर्भ उन गुणों को सेट करने का प्रयास करता है और विफल रहता है क्योंकि कोई सेटटर संपत्ति नहीं होती है। मैं उन गुणों को अनदेखा करने के लिए संदर्भ कैसे बताऊं?

यही वह है जो मैं अब कर रहा हूं। यह काम करता है, लेकिन यह बेकार है:

public bool IsPaidInFull { 
    get { return NetTotal <= 0m; } 
    set { /* needed so linq doesn't choke. Should never be set by hand */ } 
} 
+0

क्या मैं सुझाव देने वाला पहला व्यक्ति हूं - "_do_ वह नहीं"? –

+1

क्या मत करो, बिल्कुल? कामकाज एक पाप है, और अस्वीकार्य है, इसलिए मेरी पोस्ट यहां है। यदि आपका मतलब है "परिणाम सेट पर बाध्यकारी होने पर कुछ गुणों को छोड़ने का कोई तरीका न ढूंढें", तो क्या आप कृपया समझा सकते हैं? –

उत्तर

0

क्या आपने लिंक से इकाइयों को माना है? यह आपके प्रोजेक्ट को कन्वर्ट करने में परेशानी के लायक नहीं हो सकता है, इस पर निर्भर करता है कि आप कितने दूर हैं, या आप कितने ओआरएम ओवरहेड के साथ सहज हैं। हालांकि, यह सटीक परिदृश्य लिंक से इकाइयों में कोई समस्या नहीं होगी। यह लोड होने पर ऑब्जेक्ट में केवल गुणों को पढ़ने की कोशिश नहीं करता है, क्योंकि उन्हें स्पष्ट रूप से मैप नहीं किया जाता है, वे केवल विस्तार गुण हैं।

इसके अलावा, आप गुणों के बजाय गेटर कार्यों का उपयोग करके पुराने स्कूल/जावा मार्ग पर जा सकते हैं। सार्वजनिक बूल getIsPaidInFull() {वापसी NetTotal < = 0m;}।

या आप विरासत में प्राप्त बच्चे वर्ग में केवल पढ़ने के गुणों को लागू करने के साथ खेल सकते हैं, लेकिन यह सभी प्रकार के मुद्दों को पेश कर सकता है।

+0

दुर्भाग्यवश, इस परियोजना के लिए यह संभव समाधान नहीं है, लेकिन टिप के लिए धन्यवाद। मुझे लगता है कि हम भविष्य में एक पूर्ण ओआरएम पर विचार कर सकते हैं; एल 2 एस डेटा मॉडल पर एक साधारण रैपर के रूप में बहुत अच्छा है, लेकिन इसे मैपिंग परत के रूप में उपयोग करने के लिए दर्दनाक हो सकता है। मैं आपके "पुराने स्कूल" सुझाव को उत्तर के रूप में स्वीकार कर रहा हूं। मुझे एक बेहतर समाधान नहीं मिल रहा है, और मेरे वर्तमान कामकाज से गेटटर विधियां बेहतर हैं। –

1
public bool IsPaidInFull 
{ 
    get { return NetTotal <= 0m; } 
    private set { ;} 
} 
+0

यह बुरा है ... –

+0

यह डेटाकॉन्टेक्स्ट द्वारा उपयोग किए गए प्रतिबिंब के साथ कुछ करना होगा। मुझे लगता है कि डेटाकॉन्टेक्स्ट यह देखने के लिए प्रतिबिंब का उपयोग करता है कि आपकी संपत्ति पर गेटर और सेटर है या नहीं, लेकिन एक्सेस संशोधक की जांच नहीं करता है। और फिर चूंकि यह वास्तव में सेटटर का उपयोग नहीं करता है, इसलिए पहुंच के साथ कोई समस्या नहीं है। – AndyClaw

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