2010-09-20 5 views
10

तालिका में पंक्तियों को कैसे जोड़ सकता है जब तालिका में प्राथमिक कुंजी नहीं है।linq 'टेबल (req)' पर ऑपरेशन बनाएं, अपडेट करें या हटाएं निष्पादित नहीं कर सकता क्योंकि इसकी कोई प्राथमिक कुंजी

उत्तर

16

देख अपने प्रश्न के शीर्षक के रूप में कहते हैं, LINQ एसक्यूएल के लिए, बनाने के अद्यतन या एक प्राथमिक कुंजी के बिना एक मेज पर संचालन हटाया नहीं जा सकता है। यह मुमकिन नहीं है।

तो, आपको शायद उन चीजों को करने के लिए DataContext.ExecuteCommand() का उपयोग करना होगा, या बेहतर अभी तक, अपने डेटाबेस को दोबारा सुधारें ताकि टेबल में प्राथमिक कुंजी हो।

1

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

यदि तालिका में कोई प्राथमिक कुंजी नहीं है, लेकिन इसमें अद्वितीय डेटा है जिसे कुंजी के रूप में उपयोग किया जा सकता है, तो डीबीएमएल में एल 2 एस बताएं कि यह प्राथमिक कुंजी है।

यदि तालिका में अद्वितीय डेटा नहीं है जिसे कुंजी के रूप में उपयोग किया जा सकता है, तो आपको उस स्पोक को लिखना होगा जो उस डेटा को हटा देता है जिसे आप हटाना चाहते हैं।

3

यदि आप इसे डीबी में सेट नहीं कर सकते हैं, तो प्राथमिक कुंजी linq2sql डिजाइनर में सेट करें।

यदि कॉलम का कोई सबसेट नहीं है जिसे प्राथमिक कुंजी के रूप में उपयोग किया जा सकता है, तो उन्हें प्राथमिक कुंजी के हिस्से के रूप में चिह्नित करें।

+0

बहुत अच्छा विचार है लेकिन मैं पहले से ही टेबल में सेट हूं –

4

मुझे एक नमूने के साथ वर्णन करते हैं:

SampleDataContextDataContext db = new SampleDataContextDataContext(); 
Employee emp = new Employee() { 
     FirstName = "Experts", 
     Lastname = "Comment", 
     Address = "[email protected]" 
}; 

db.Employees.InsertOnSubmit(emp); 
db.SubmitChanges(); 

ऊपर कोड है जब एक नई पंक्ति सम्मिलित करने की कोशिश कर एक ही त्रुटि दे रहा था। इस मुद्दे के पीछे कारण यह है कि LINQ प्राथमिक कुंजी के बिना तालिका में डेटा डालने की सुविधा प्रदान नहीं करता है। इस बिंदु पर आपके पास दो विकल्प हैं जिनका उपयोग आप सम्मिलन संचालन करने के लिए कर सकते हैं।

1. स्टोर प्रक्रिया बनाएं और इसे LINQ से कॉल करें।

SampleDataContextDataContext db = new SampleDataContextDataContext(); 
db.InsertEmployeeData("Experts","Comment", "[email protected]"); 

यहाँ मैं नाम InsertEmployeeData के साथ एक संग्रहीत प्रक्रिया बनाया है, और कोड से यह कहा जाता है। सरल और सीधे आगे।

2. LINQ का उपयोग करके एक सम्मिलित कथन बनाएं और निष्पादित करें।

SampleDataContextDataContext db = new SampleDataContextDataContext(); 

string insertStatement = "Insert into Employee values('Experts', 'Comment','[email protected]')"; 
db.ExecuteQuery<Employee>(insertStatement); 

यहाँ मैं एक सामान्य डालने क्वेरी बनाया है और LINQ ExecuteQuery पद्धति का उपयोग करके मार डाला।

5

मैं भी यही issue.But मैं इस समस्या का समाधान ...

1.Set (सर्वर Explorer में तालिका आप पर राइट क्लिक करके खुले तालिका परिभाषा यह जांच कर सकते हैं के लिए प्राथमिक कुंजी मिल गया तालिका)

2. ओपन डेटाकलास।App_Code फ़ोल्डर

3.Remove पहले से ही विद्यमान तालिका

4.Drag फिर PrimaryKey सेट करने के बाद एक ही टेबल के नीचे dbml।

5.Save सब बदल जाता है। (सिस्टम फ़ाइल .dbml में परिवर्तन सहेजने के लिए संकेत देगा -> हाँ पर क्लिक करें) आवेदन 6.run

फिर

यह काम करेंगे

1

कुछ टेबल (जैसे विक्रेताओं ने टेबल प्रदान किए हैं) एक प्राथमिक कुंजी नहीं है!

प्रत्येक उत्तर "प्राथमिक कुंजी जोड़ें" कहता है।

देखो, मैं नहीं पूछूंगा कि मैं सिर्फ एक जोड़ सकता हूं या नहीं। शर्तें मेरे द्वारा पूर्व निर्धारित नहीं हैं।

क्या बस लिखने का कोई तरीका है। कोई पढ़ना, हटाना या अद्यतन करना आवश्यक नहीं है।

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