मैं एक बाल तालिका में रिकॉर्ड डालने के लिए LINQ का उपयोग करने का प्रयास कर रहा हूं और मैं प्राप्त कर रहा हूं "निर्दिष्ट कास्ट वैध नहीं है" त्रुटि प्राप्त करने में कुछ है जिसमें w/ शामिल कुंजी शामिल हैं। स्टैक ट्रेस है:LINQ से SQL -
संदेश: निर्दिष्ट कास्ट मान्य नहीं है।
प्रकार: System.InvalidCastException स्रोत: System.Data.Linq TargetSite: बूलियन TryCreateKeyFromValues (System.Object [], वी ByRef) HELPLINK: अशक्त ढेर: System.Data.Linq.IdentityManager.StandardIdentityManager पर .SingleKeyManager
: System.Data.Linq.DataContext.SubmitChanges()2.TryCreateKeyFromValues(Object[] values, V& v) at System.Data.Linq.IdentityManager.StandardIdentityManager.IdentityCache
2.Find (ऑब्जेक्ट [] keyValues) (keyValues MetaType प्रकार, वस्तु []) System.Data.Linq.IdentityManager.StandardIdentityManager.Find पर System.Data.Linq.CommonDataServices.GetCachedObject पर (MetaType टाइप करें, ऑब्जेक्ट [] कीवैल्यूज़) सिस्टम.डाटा.लिंक। चेंजप्रोसेसर। गेटऑथरइटम (मेटाएसो ciation Assoc, उदाहरण वस्तु) System.Data.Linq.DataContext.SubmitChanges पर System.Data.Linq.ChangeProcessor.BuildEdgeMaps() System.Data.Linq.ChangeProcessor.SubmitChanges पर (ConflictMode failureMode) पर (ConflictMode(.....)
यह त्रुटि निम्न कोड पर फेंक दिया जा रहा है पर failureMode)
प्रश्नों की तालिका में दोनों के बीच एक एफके संबंध है।
अभिभावक तालिका के कॉलम को 'आईडी' कहा जाता है, पीके है, और प्रकार का है: INT NOT NULL IDENTITY
बच्चे तालिका के कॉलम को 'respondCodeTableId' कहा जाता है और यह प्रकार है: INT NOT NULL।
codebookVersion (मूल वर्ग) तालिका tblResponseCodeTable
प्रतिक्रिया कोड (childClass) तालिका tblResponseCode
का मानचित्रण अगर मैं सीधे एसक्यूएल निष्पादित करने के लिए नक्शे, यह काम करता है। जैसे
INSERT INTO tblResponseCode
(responseCodeTableId, surveyQuestionName, code, description)
VALUES (13683, 'Q11', 3, 'Yet another code')
उसी कक्षा के अपडेट ठीक से काम करते हैं। जैसे
codebookVersion.ResponseCodes[0].Description = "BlahBlahBlah";
db.SubmitChanges(); //no exception - change is committed to db
मैं चर, आर सी की जांच करने के बाद, .Add() ऑपरेशन के बाद और यह है, वास्तव में, उचित responseCodeTableId प्राप्त करते हैं, के बाद से मैं यह है कि संग्रह करने के लिए जोड़ रहा बस के रूप में मैं उम्मीद होती है।
tblResponseCodeTable's full definition:
COLUMN_NAME TYPE_NAME
id int identity
responseCodeTableId int
surveyQuestionName nvarchar
code smallint
description nvarchar
dtCreate smalldatetime
डीटीक्रेट के पास GetDate() का डिफ़ॉल्ट मान है।
उपयोगी जानकारी है कि मैं के बारे में सोच सकता है की केवल एक अन्य सा है कि कोई एसक्यूएल कभी, (इसलिए त्रुटि एक SqlException नहीं किया जा रहा) डेटाबेस के खिलाफ मुकदमा किया जाता है तो LINQ से पहले यह कभी की कोशिश करता उड़ा रहा है। मैंने प्रोफाइल किया है और सत्यापित किया है कि डेटाबेस पर किसी भी कथन को निष्पादित करने का कोई प्रयास नहीं किया गया है।
मैंने एक गैर पीके क्षेत्र से संबंध होने पर समस्या को देखा और देखा है, लेकिन यह मेरे मामले में फिट नहीं है।
क्या कोई मेरे लिए इस स्थिति पर कोई प्रकाश डाल सकता है? मैं यहां क्या अविश्वसनीय रूप से स्पष्ट बात कर रहा हूं?
बहुत धन्यवाद।
पॉल Prewett
इसी समस्या यहाँ पर चर्चा की है, मेरी समस्याओं को हल: http://stackoverflow.com/questions/4801364/specified-cast-is-not-valid-error-when-saving- linq-to-sql-entity –