2010-05-17 7 views
10

बंद करने के लिए सेट है मेरे पास मॉडल में एक तालिका के साथ एक एमवीसी वेब एप्लिकेशन है जिसे मैं जोड़ना चाहता हूं। मेरे पास अन्य डेटा फ़ील्ड्स के साथ प्राथमिक कुंजी सेट है, लेकिन हर बार जब मैं तालिका में जोड़ने का प्रयास करता हूं, तो मुझे निम्न त्रुटि मिलती है:IDENTITY_INSERT त्रुटि

"तालिका में पहचान कॉलम के लिए स्पष्ट मान सम्मिलित नहीं कर सकता है 'TABLE_NAME' जब IDENTITY_INSERT है बंद करने के लिए सेट। "

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

अद्यतन: @ ब्रायन - जहां तक ​​मैं कह सकता हूं, मैं मूल्य को स्पष्ट रूप से सेट नहीं कर रहा हूं, यहां कोड है जो तालिका में जोड़ता है।

//Add viewer 
public void addViewer(ModelStateDictionary modelState, Users user) 
{ 
    var userToAdd = new UserRoles(); 
    userToAdd.Users = user; 

    if (String.IsNullOrEmpty(userToAdd.Users.Username)) 
    { 
     modelState.AddModelError("noName", "Please enter a username for the new Viewer"); 
    } 

    //See if Committee Member already exists 
    try 
    { 
     userToAdd = _db.UserRoles.First(ur => ur.Users.Username == userToAdd.Users.Username); 
     modelState.AddModelError("userExists", "A Viewer with that username already exists in the system"); 
     return; 
    } 
    catch (Exception e) 
    { 
     if (modelState.IsValid) 
     { 
      //Assign Committee Member role 
      userToAdd.Role = "Viewer"; 
      userToAdd.Users = user; 
      //Add new Committee Member to User Roles and associated username to Users 
      _db.AddToUserRoles(userToAdd); 
      _db.SaveChanges(); 
     } 
    } 
} 
+0

अपने Linq करने वाली एसक्यूएल डिजाइनर में सवाल में मेज पर अपनी सेटिंग्स/संपत्तियों की जांच करें - जानकारी के लिए मेरा उत्तर देखते हैं - आप कुछ विशिष्ट सेटिंग्स सुनिश्चित करने के लिए की जरूरत है। –

+0

बस '* .edmx' को मेरी प्राथमिक कुंजी से संबंधित मान को बदलने के लिए '<संपत्ति नाम =" आईडी "प्रकार =" int "Nullable =" false "/>' '' संपत्ति का नाम = "आईडी" प्रकार से संपादित करें = "int" Nullable = "false" StoreGeneratedPattern = "पहचान" /> '। यह सिर्फ इसके मूल्य के साथ विशेषता जोड़ रहा था: 'StoreGeneratedPattern = "पहचान" '। –

उत्तर

5

आप संभावित रूप से संभवतः LINQ इकाई में प्राथमिक कुंजी मान सेट करने का प्रयास कर रहे हैं; आप कहने की कोशिश कर रहे हैं, उदाहरण के लिए, प्राथमिक कुंजी फ़ील्ड में 1 डालें जो पहचान है, और LINQ इसे एक सम्मिलित मान के रूप में देखता है।

यदि LINQ से SQL का उपयोग करते हुए, सर्वर डेटा प्रकार के क्षेत्र में, सुनिश्चित करें कि यह डेटा प्रकार फ़ील्ड में पहचान कहता है; यदि यह पहचान नहीं कहता है, तो LINQ में कॉन्फ़िगरेशन त्रुटि हो सकती है।

+0

+1 यही वह है जिसके साथ मैं आना चाहता था। =) (भाषा बाधा =() –

+0

मैं वास्तव में LINQ करने वाली संस्थाओं अपने मॉडल के लिए। – kingrichard2005

+0

StoreGeneratedPattern संस्थाओं, कम से कम 4.0 के लिए करने के लिए LINQ के लिए पहचान कहना चाहिए उपयोग कर रहा हूँ। 1.0 एक बहुत उपयोग नहीं किया था। –

14

ऐसा लगता है कि आपका कोड प्राथमिक कुंजी कॉलम में एक विशिष्ट मान डालने का प्रयास कर रहा है जिसे पहचान के रूप में परिभाषित किया गया है।

त्रुटि से बचने के लिए - कोई मान डालें नहीं! आपके द्वारा डालने वाली पंक्ति के लिए डेटाबेस को एक नया मान प्राप्त करने दें।

आप Linq-एसक्यूएल के लिए उपयोग कर रहे हैं, अपने दृश्य डिजाइनर में सवाल में मेज पर क्लिक करें, और गुण पर एक नजर है:

alt text http://i39.tinypic.com/bgzs6d.png

"स्वतः जेनरेट हुआ मान" चाहिए "सत्य" (जो डिफ़ॉल्ट नहीं है) हो, और ऑटो-सिंक "ऑनइन्सर्ट" होना चाहिए (फिर से: डिफ़ॉल्ट नहीं)। साथ ही, "प्राथमिक कुंजी" को सत्य पर सेट करें, और यह सुनिश्चित करने के लिए जांचें कि "सर्वर डेटा प्रकार" सही है - Int NOT NULL IDENTITY (या ऐसा कुछ)।

यदि आपको कभी भी डिफ़ॉल्ट व्यवहार को ओवरराइड करने की आवश्यकता है (आमतौर पर केवल क्लीन-अप स्क्रिप्ट या एक-ऑफ डेटा मैनिपुलेशन में), तो आप तालिका पर IDENTITY_INSERT चालू कर सकते हैं, उदा। कुछ आप एक देव के रूप में हर समय क्या करना चाहिए नहीं -

SET IDENTITY_INSERT YourTableName ON 

INSERT INTO YourTableName(IdentityColumn) VALUES(5555) 

SET IDENTITY_INSERT YourTableName OFF 

इस कार्य की सफाई/डेटा व्यवस्थापक तरह का अधिक है: उसके बाद, आप पहचान स्तंभ में पसंद के किसी भी मान सम्मिलित कर सकते हैं।

+0

मैं सही करने की कोशिश की mssql सर्वर प्रबंधन स्टूडियो के डिज़ाइनर में तालिका पर क्लिक करके आपने कुछ भी नहीं देखा। मैंने पहचान सम्मिलन को चालू करने के लिए क्वेरी चलाई लेकिन इससे मेरे कोड को प्रोग्राम्सेटिक रूप से तालिका में सम्मिलित करने में मदद नहीं मिली। – obesechicken13

+0

मैंने दृश्य स्टूडियो में इसे फिर से करने की कोशिश की मुझे "प्राथमिक कुंजी" केवल "इकाई कुंजी" के लिए विकल्प नहीं दिखते हैं। मुझे प्रकार दिखाई देता है। मुझे आपके द्वारा देखे गए अन्य बोल्ड पैरामीटर में से कोई भी दिखाई नहीं देता है। – obesechicken13

4

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

0

मुझे यह समस्या थी और मॉडल से पहचान कॉलम को हटाकर इसे हल किया गया। इसने इसे

1

यदि आप LINQ से SQL.just का उपयोग कर रहे हैं, तो तालिका पर राइट क्लिक करके और "मॉडल से निकालें" विकल्प का चयन करके .edmx फ़ाइल से अपनी तालिका हटा दें। और फिर .edmx फ़ाइल पर राइट क्लिक करके और "डेटाबेस से मॉडल अपडेट करें" विकल्प चुनकर अपनी .edmx फ़ाइल अपडेट करें।

यह me..Try के लिए अपने काम ..

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

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