5

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

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

कारण मुझे अंतिम आइटम और +1 नहीं मिल रहा है, क्योंकि यदि मेरी तालिका में आइटम 1,2,3,4 और 5 है, तो आइटम 5 को हटाकर फिर एक और जोड़ना अगले आइटम आइटम 6 बन जाएगा, बल्कि 5 से अधिक (जैसा कि मैं एसक्यूएल में पहचान विशिष्टता का उपयोग करता हूं, लेकिन इसका उपयोग किया जाना चाहिए)।

मुझे कोई तरीका नहीं मिल रहा है जैसे Item.ID.GetNextIdentity() या ऐसा कुछ और इस तरह के कई समान प्रश्नों को देखा है लेकिन इसका कोई फायदा नहीं हुआ है।

किसी भी मदद

+0

क्या यह प्रश्न मदद नहीं करता है? http://stackoverflow.com/questions/2958921/entity-framework-4-how-to-find-the-primary-key –

+0

@ क्रिस, मैंने इसे खोजते समय देखा और अगले के बारे में कुछ भी उल्लेख नहीं किया कुंजी, सवाल और जवाब मुझे लगा कि वे उस क्षेत्र को खोजने के बारे में बात कर रहे थे जो प्राथमिक कुंजी है, न कि अगली प्राथमिक कुंजी जो कि क्षेत्र में उपयोग की जाएगी। – JakeJ

+3

आप अगली आईडी के साथ क्या करने जा रहे हैं? भले ही आपको इसे प्राप्त करने का कोई तरीका मिल जाए, आप यह सुनिश्चित नहीं कर सकते कि यह ** ** ** है जो आईडी प्राप्त करता है। –

उत्तर

9

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

  • आईडी के रूप में स्वत: वृद्धि स्तंभ का उपयोग नहीं है और तुरंत जब उपयोगकर्ता शुरू होता है विशिष्टता अपने आप
  • सहेजें प्रपत्र संभाल कुछ प्रारंभिक खाली राज्य में इसे बनाने और अंतिम रूप पुष्टि केवल

अद्यतन क्यों आप अगले आईडी के लिए नहीं पूछ सकते हैं क्या करेंगे? क्योंकि यदि आप इसे किसी भी तरह से करते हैं तो कोई भी नहीं कहता है कि प्राप्त आईडी वास्तव में आपके फॉर्म के लिए उपयोग की जाएगी। यदि आपकी आईडी पुनर्प्राप्ति और आपके फॉर्म दृढ़ता के बीच कोई अन्य प्रक्रिया/थ्रेड/एप्लिकेशन सम्मिलित होता है, तो आपके द्वारा दिखाए गए आईडी को उस सम्मिलित रूप में असाइन किया जाएगा।

यदि आप डेटाबेस में ऑटो वृद्धिशील प्राथमिक कुंजी का उपयोग कर रहे हैं तो आप अपने आवेदन में कुंजी मान असाइन नहीं कर सकते हैं - मान का उपयोग नहीं किया जाएगा और डेटाबेस इसे अपने आप ओवरराइड कर सकता है।

-1

DBCC CHECKIDENT (table_name, NORESEED)

रिटर्न वर्तमान पहचान मूल्य और पहचान स्तंभ का वर्तमान अधिकतम मूल्य की सराहना की जाएगी।

+0

मुझे आदेश करने और C# पक्ष में लौटाए गए मान का उपयोग करने की आवश्यकता है एंटिटी फ्रेमवर्क 4 का उपयोग करके मेरा एप्लिकेशन, ऐसा लगता है कि यह आदेश SQL क्वेरी में किया जाना है, न कि इकाई फ्रेमवर्क। अगर मैं एंटिटी फ्रेमवर्क 4 के माध्यम से ऐसा कर सकता हूं, तो मुझे नहीं पता कि आपको मुझे कैसे बताना होगा। – JakeJ

+0

वह दौड़ की स्थिति के तहत काम नहीं करेगा। – HLGEM

0

लाडस्लाव मिन्का के साथ काफी सहमत हैं, हालांकि, इस तरह की कार्यक्षमता की आवश्यकता हो सकती है। एक बाईपास सुझाव होगा:

 // Insert existing object in data base via EF, but PK is missing ... 
     using (var Es = new MyEntities()) 
     { 
      try 
      { 
       // Allows you to get next pk 
       var e = new Model.TableXXX(); 
       // Set pk to existing entity which has no pk 
       existingEntity.PkField = e.PkField; 
       // Save existing object and let garbage collector take care 
       // of newly created entity 
       Es.TableXXX.AddObject(existingEntity); 
       Es.SaveChanges(); 
      } 
      catch (Exception ex) 
      { 
       // implement exception 
      } 
     } 
संबंधित मुद्दे