Ich habe eine Tabelle, werden wir Users
nennen. Diese Tabelle hat einen einzelnen Primärschlüssel, der in SQL Server definiert ist - ein Autoinkrement int ID
.Seltsam LINQ Exception (Index außerhalb der Grenzen)
Manchmal scheitern meine LINQ-Abfragen für diese Tabelle mit einem "Index was outside the range"
Fehler - selbst die einfachsten Abfragen. Die Abfrage selbst verwendet keine Indexer.
Zum Beispiel:
User = Users.Take(1);
oder
IEnumerable<Users> = Users.ToList();
Beide Abfragen warf den gleichen Fehler. Mit dem Debugger Visualizer, um die generierte Abfrage zu sehen - ich kopiere und füge die Abfrage in SQL und es funktioniert gut. Ich klicke auch auf "Ausführen" auf dem Visualizer und es funktioniert gut. Die Ausführung des Codes führt jedoch zu diesem Fehler. Ich implementiere keine der partiellen Methoden in der Klasse, also passiert dort nichts. Wenn ich meinen Debugger neu starte, verschwindet das Problem, nur um den Kopf ein paar Stunden später wieder nach oben zu ziehen. Kritisch, ich sehe diesen Fehler in meinen Fehlerprotokollen von der App, die in der Produktion läuft.
Ich mache eine Menge LINQ in meiner App, gegen ein Dutzend verschiedener Entitäten in meiner Datenbank, aber ich sehe dieses Problem nur bei Abfragen, die sich auf eine bestimmte Entität in meiner Tabelle beziehen. Einige Googeln haben vorgeschlagen, dass dieses Problem auf eine falsche Beziehung zwischen meinem Modell und einem anderen Unternehmen angegeben in Zusammenhang stehen könnte, aber ich habe nicht keine Beziehungen mit diesem Objekt. Es scheint 95% der Zeit zu funktionieren, nur die anderen 5% scheitern.
Ich habe gelöscht vollständig das Objekt aus dem Designer, und es von einem „aufgefrischt“ Server-Browser erneut hinzugefügt, und dass das Problem nicht beheben.
Irgendwelche Ideen, was hier vor sich geht?
Hier ist die vollständige Fehlermeldung und Stack-Trace:
Index außerhalb des zulässigen Bereichs war. Muss nicht negativ sein und weniger als die Größe der Sammlung. Parametername: Index bei System.Data.Linq.SqlClient.SqlProvider.Execute (Expression Abfrage, Queryquery, IObjectReaderFactory Fabrik, Object [] parentArgs, Object [] userArgs, ICompiledSubQuery [] Subqueries, Object lastresult) bei System.Data.Linq.SqlClient.SqlProvider.ExecuteAll (Expression Abfrage, Query [] queryInfos, IObjectReaderFactory Fabrik, Object [] userArguments, ICompiledSubQuery [] Subqueries) bei System.Data.Linq.SqlClient.SqlProvider.System.Data .Linq.Provider.IProvider.Execute (Ausdruck Abfrage) um System.Data.Linq.Table
1.System.Linq.IQueryProvider.Execute[TResult](Expression expression) at System.Linq.Queryable.FirstOrDefault[TSource](IQueryable
1 Quelle, Ausdruck `1 Prädikat) bei MyProject.FindUserByType (String typeId)
BEARBEITEN: Wie unten beschrieben, ist eine Kopie des Tabellenschemas.
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]
EDIT: Der Stack-Trace zeigt FirstOrDefault
, aber ich dupliziert den Fehler sowohl Take()
und ToList()
verwenden. Der Stack-Trace ist zwischen all diesen identisch, einfach interchangnig FirstOrDefault/Take/ToList
. Die Abwärtsbewegung des Stapels zu SqlProvider.Execute
ist tatsächlich identisch.
Keine Ahnung was passiert, aber faszinierend! Wenn alles andere fehlschlägt, können Sie die General Linq Project Liste versuchen: http://forums.microsoft.com/MSDN/ShowForum.aspx?ForumID=123&SiteID=1 –
Es könnte hilfreich sein, wenn wir die Tabellendefinition sehen könnten. – KyleLanser
(mssql -> Datenbanken -> the_db -> Tabellen -> the_bad_table -> Rechtsklick -> Skripttabelle als -> Create To) – KyleLanser