2008-12-02 15 views
7

के साथ लिंक सम्मिलित करें मुझे उस तालिका में रिकॉर्ड्स डालने की आवश्यकता है जिसमें LINQ से SQL का उपयोग करने की कोई प्राथमिक कुंजी नहीं है। तालिका खराब डिजाइन की गई है; मेरे पास टेबल संरचना पर कोई नियंत्रण नहीं है। तालिका में कुछ वर्चर्स फ़ील्ड, एक टेक्स्ट फ़ील्ड और टाइमस्टैम्प शामिल है। इसका उपयोग अन्य संस्थाओं के लिए एक लेखापरीक्षा निशान के रूप में किया जाता है।कोई प्राथमिक कुंजी

आवेषण को पूरा करने का सबसे अच्छा तरीका क्या है? क्या मैं इस तालिका के लिए लिंक आंशिक कक्षा का विस्तार कर सकता हूं और "नकली" कुंजी जोड़ सकता हूं? मैं किसी भी हैक के लिए खुला हूं, हालांकि क्लेजी।

उत्तर

11

LINQ से SQL इस कार्य के लिए नहीं है, इसलिए इसका उपयोग न करें। बस संग्रहीत प्रक्रिया में सम्मिलित करें और प्रक्रिया को अपने डेटा मॉडल में जोड़ें। यदि आप ऐसा नहीं कर सकते हैं, तो कुछ सामान्य एसक्यूएल के साथ एक सामान्य फ़ंक्शन लिखें।

9

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

2

आप अपना खुद का कस्टम सम्मिलन कथन चलाने के लिए DataContext.ExecuteCommand विधि का उपयोग कर सकते हैं।

या, आप एक कॉलम पर primary key जोड़ सकते हैं, तो यह डेटाकॉन्टेक्स्ट द्वारा प्रविष्टियों/अपडेट/हटाए जाने के लिए objects to be tracked को अनुमति देगा। यह तब भी काम करेगा जब कॉलम वास्तव में डेटाबेस में एक लागू प्राथमिक कुंजी नहीं है (linq कैसे पता चलेगा?)। यदि आप केवल आवेषण कर रहे हैं और उसी डेटाकॉन्टेक्स्ट में प्राथमिक कुंजी मान का पुन: उपयोग नहीं करते हैं, तो आप ठीक होंगे।

3

मैं एक समग्र कुंजी का उपयोग कर इस पर काम करने में सक्षम था।

मुझे एक तालिका के साथ एक ही समस्या थी जिसमें केवल दो कॉलम थे: उपयोगकर्ता नाम, भूमिका। इस तालिका को स्पष्ट रूप से पहचान कॉलम की आवश्यकता नहीं है। इसलिए, मैंने उपयोगकर्ता नाम और भूमिका के साथ एक समग्र कुंजी बनाई। इससे मुझे प्रविष्टियों को जोड़ने और हटाने के लिए LINQ का उपयोग करने में सक्षम बनाया गया।

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