2011-05-26 8 views
13

मेरे पास एक SQL सर्वर डेटाबेस है। इस डेटाबेस में आइटम नामक एक टेबल है। आइटम में "आईडी" नामक एक संपत्ति है। आईडी मेरी तालिका पर प्राथमिक कुंजी है।पहचान इंसर्ट और LINQ से SQL

तालिका 'आइटम' में पहचान स्तंभ के लिए स्पष्ट मूल्य सम्मिलित नहीं कर सकते जब identity_insert सेट किया गया है: यह प्राथमिक कुंजी जब मैं रिकॉर्ड सम्मिलित करने का प्रयास, मैं एक त्रुटि है जिसमें यह कहा 1. की एक वेतन वृद्धि मूल्य के साथ एक पूर्णांक है ।।

public int AddItem(Item i) 
    { 
    try 
    { 
     int id = 0; 
     using (DatabaseContext context = new DatabaseContext()) 
     { 
     i.CreatedOn = DateTime.UtcNow; 
     context.Items.InsertOnSubmit(i); 
     context.SubmitChanges(); 
     id = i.ID; 
     } 
     return id; 
    } 
    catch (Exception e) 
    { 
     LogException(e); 
    } 
    } 

जब मैंने इसे प्रस्तुत करने से पहले i.ID को देखो, मुझे लगता है कि i.ID 0 पर सेट है नोटिस: बंद करने के लिए "

मैं निम्नलिखित कोड का उपयोग कर रिकॉर्ड सम्मिलित करने का प्रयास कर रहा हूँ जो दर्शाता है कि मैं पहचान के रूप में 0 डालने की कोशिश कर रहा हूं। एच ओवेवर, मुझे यकीन नहीं है कि यह क्या होना चाहिए। क्या कोई मेरी मदद कर सकता है?

धन्यवाद!

+0

क्या आप सुनिश्चित हैं कि आपने कॉलम को डीबी में प्राथमिक कुंजी के रूप में सेट किया है और आपके लिंक से एसक्यूएल उत्पन्न वर्गों को प्रतिबिंबित किया गया है।मुझे कभी-कभी पता है कि मैं एक कॉलम को प्राथमिक कुंजी के रूप में चिह्नित करना भूल जाता हूं और मेरे जेनरेट किए गए वर्गों को अपडेट करने की आवश्यकता होती है। –

उत्तर

9

ऐसा लगता है कि आपका मॉडल इस तथ्य से अनजान है कि एक पहचान है; ID कॉलम को यूआई में डीबी-जेनरेट किया गया (Auto Generated Value, या IsDbGenerated एक्सएमएल में), और शायद प्राथमिक कुंजी के रूप में चिह्नित किया जाना चाहिए। फिर यह इसे सम्मिलित करने का प्रयास नहीं करेगा, और लिखा जाने के बाद मूल्य को सही तरीके से अपडेट करेगा।

2

आईडी तब तक शून्य होगी जब तक कि आप संदर्भ को कॉल न करें। सबमिट करें चेंज(); कोड के माध्यम से कदम उठाएं और सबमिटChanges के बाद मूल्य को देखें। याद रखें, डीबी वास्तव में आईडी असाइन कर रहा है (यह मानते हुए कि यह एक ऑटो-वृद्धि कुंजी है)।

इस पर एक नज़र डालें:

Working with Entity Keys

7

सेट आईडी प्रॉपर्टी की "स्वतः जेनरेट" संपत्ति को "सही"।

0

आपको डेटाबेस में आईडी उत्पन्न होने वाली मैपिंग में परिभाषित करना होगा। ऐसा करने का तरीका आप जिस मैपिंग का उपयोग कर रहे हैं उसके प्रकार पर निर्भर करता है। यदि आप कोड विशेषताओं का उपयोग कर रहे हैं तो सुनिश्चित करें कि Id संपत्ति (या XML मैपिंग में) के लिए ColumnAttribute में आप IsDbGenerated निर्दिष्ट करते हैं। यदि आप डीबीएमएल फ़ाइल का उपयोग कर रहे हैं तो सुनिश्चित करें कि ऑटो जेनरेटेड वैल्यू सत्य पर सेट है।

6

Item वर्ग के अंदर अपने ID संपत्ति की जाँच करें सुनिश्चित करने के लिए है कि यह इस तरह गुण: IsDbGenerated=true पर

[Column(Storage="_ID", AutoSync=AutoSync.OnInsert, 
    DbType="INT NOT NULL IDENTITY", IsPrimaryKey=true, IsDbGenerated=true)] 

देखो, इसे यहाँ महत्वपूर्ण आदमी है।

शायद तुम DatabaseContext Sql सर्वर पर IDENTITY एडजस्ट करने से पहले डिजाइनर का उपयोग कर, तो बस इस वर्ग को पुनर्जीवित (डिजाइनर में तालिका को हटाकर और सर्वर एक्सप्लोरर से फिर से छोड़ने के द्वारा) बनाया।

0

सबसे आसान तरीका है: प्राथमिक कुंजी 4. जांच गुण विंडो में संपत्ति जनरेट किया गया है (यह सही पर सेट किया जाना चाहिए)

ऑटो के साथ डालने 3. स्तंभ का चयन के लिए 1. खुला dbml वर्ग 2. चयन