मेरे पास एक टेबल है, हम Users
पर कॉल करेंगे। इस तालिका में SQL सर्वर में परिभाषित एक प्राथमिक कुंजी है - एक autoincrement int ID
।अजीब LINQ अपवाद (सीमाओं से बाहर सूचकांक)
कभी-कभी, इस तालिका के विरुद्ध मेरी LINQ क्वेरी "Index was outside the range"
त्रुटि के साथ विफल होती है - यहां तक कि सबसे सरल प्रश्न भी। क्वेरी स्वयं किसी भी इंडेक्सर्स का उपयोग नहीं करती है।
उदाहरण के लिए:
User = Users.Take(1);
या
IEnumerable<Users> = Users.ToList();
प्रश्नों के दोनों एक ही त्रुटि फेंक दिया। उत्पन्न क्वेरी को देखने के लिए डीबगर विजुअलाइज़र का उपयोग करना - मैं SQL में क्वेरी कॉपी और पेस्ट करता हूं और यह ठीक काम करता है। मैं विजुअलाइज़र पर "निष्पादित" पर भी क्लिक करता हूं और यह ठीक काम करता है। लेकिन कोड को निष्पादित करने से यह त्रुटि फेंकता है। मैं कक्षा में किसी भी आंशिक तरीकों को लागू नहीं करता, इसलिए वहां कुछ भी नहीं हो रहा है। अगर मैं अपने डीबगर को पुनरारंभ करता हूं, तो समस्या दूर हो जाती है, कुछ घंटों बाद यादृच्छिक रूप से फिर से इसके सिर को पीछे छोड़ने के लिए। अधिक गंभीर रूप से, मैं इस बग को उत्पादन में चल रहे ऐप से अपने त्रुटि लॉग में देखता हूं।
मैं अपने ऐप में LINQ का एक टन करता हूं, मेरे डेटाबेस में एक दर्जन या उससे अलग इकाइयों के खिलाफ, लेकिन मुझे केवल मेरी तालिका में किसी विशिष्ट इकाई से संबंधित प्रश्नों पर यह समस्या दिखाई देती है। कुछ googling ने सुझाव दिया है कि यह समस्या मेरे मॉडल और किसी अन्य इकाई के बीच निर्दिष्ट गलत रिश्ते से संबंधित हो सकती है, लेकिन मेरे पास इस ऑब्जेक्ट के साथ कोई संबंध नहीं है। ऐसा लगता है कि यह 9 5% काम कर रहा है, यह सिर्फ 5% असफल है।
मैंने डिजाइनर से पूरी तरह से वस्तु को हटा दिया है, और इसे "ताज़ा" सर्वर ब्राउज़र से फिर से जोड़ा है, और इससे समस्या ठीक नहीं हुई है।
कोई विचार क्या हो रहा है?
यहाँ पूर्ण त्रुटि संदेश और स्टैक ट्रेस है:
सूचकांक सीमा से बाहर किया गया था। गैर-नकारात्मक और संग्रह के आकार से कम होना चाहिए। पैरामीटर नाम: System.Data.Linq.SqlClient.SqlProvider.Execute में सूचकांक (अभिव्यक्ति क्वेरी, QueryInfo queryInfo, IObjectReaderFactory कारखाने, वस्तु [] parentArgs, वस्तु [] userArgs, ICompiledSubQuery [] सबक्वेरी, वस्तु LASTRESULT कुल) पर System.Data.Linq.SqlClient.SqlProvider.ExecuteAll System.Data.Linq.SqlClient.SqlProvider.System.Data पर (अभिव्यक्ति क्वेरी, QueryInfo [] queryInfos, IObjectReaderFactory कारखाने, [] userArguments, ICompiledSubQuery [] सबक्वेरी वस्तु) Linq.Provider.IProvider.Execute (अभिव्यक्ति क्वेरी) सिस्टम.डाटा.लिंक.टेबल
1.System.Linq.IQueryProvider.Execute[TResult](Expression expression) at System.Linq.Queryable.FirstOrDefault[TSource](IQueryable
1 स्रोत, अभिव्यक्ति`1 अनुमान) MyProject.FindUserByType (स्ट्रिंग प्रकार आईडी) पर
संपादित करें: जैसा कि अनुरोध किया गया है, नीचे तालिका स्कीमा की एक प्रति है।
CREATE TABLE [dbo].[Container](
[ID] [int] IDENTITY(1,1) NOT NULL,
[MarketCode] [varchar](max) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
[Description] [varchar](max) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
[Capacity] [int] NOT NULL,
[Volume] [float] NOT NULL
CONSTRAINT [PK_Container] PRIMARY KEY CLUSTERED
(
[ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
संपादित करें: स्टैक ट्रेस FirstOrDefault
से पता चलता है, लेकिन मैं Take()
और ToList()
दोनों का उपयोग कर त्रुटि दोहराया। स्टैक ट्रेस इन सभी के बीच समान है, बस FirstOrDefault/Take/ToList
interchangnig interchangnig। स्टैक को SqlProvider.Execute
पर ले जाना वास्तव में समान है।
क्या हो रहा है पर कोई विचार नहीं, लेकिन आकर्षक! यदि सब कुछ विफल हो जाता है, तो आप सामान्य लिंक परियोजना सूची को आजमा सकते हैं: http://forums.microsoft.com/MSDN/ShowForum.aspx?ForumID=123&SiteID=1 –
यदि हम तालिका परिभाषा देख सकते हैं तो यह मदद कर सकता है। – KyleLanser
(mssql -> डेटाबेस -> the_db -> टेबल्स -> the_bad_table -> दायाँ क्लिक करें -> स्क्रिप्ट तालिका के रूप में -> बनाएं) – KyleLanser