Seltsame LINQ-Ausnahme (Index außerhalb der Grenzen)
Ich habe einen Tisch, wir rufen anUsers
. In dieser Tabelle ist ein einzelner Primärschlüssel in SQL Server definiert - eine automatische Inkrementierungint ID
.
Manchmal schlagen meine LINQ-Abfragen für diese Tabelle mit einem fehl"Index was outside the range"
Fehler - auch die einfachste von Abfragen. Die Abfrage selbst verwendet keine Indexer.
Zum Beispiel:
User = Users.Take(1);
oder
IEnumerable<Users> = Users.ToList();
Beide Abfragen warfen den gleichen Fehler. Verwenden des Debuggers Visualizer zum Anzeigen der generierten Abfrage - Ich kopiere die Abfrage und füge sie in SQL ein, und sie funktioniert einwandfrei. Ich klicke auch auf "Ausführen" im Visualizer und es funktioniert gut. Aber das Ausführen des Codes selbst löst diesen Fehler aus. Ich implementiere keine der partiellen Methoden in der Klasse, daher passiert dort nichts. Wenn ich meinen Debugger neu starte, verschwindet das Problem, nur um den Kopf ein paar Stunden später zufällig wieder aufzurichten. Noch kritischer ist, dass ich diesen Fehler in meinen Fehlerprotokollen der in der Produktion laufenden App sehe.
In meiner App wird eine Menge LINQ für etwa ein Dutzend verschiedene Entitäten in meiner Datenbank ausgeführt. Dieses Problem tritt jedoch nur bei Abfragen auf, die sich auf eine bestimmte Entität in meiner Tabelle beziehen. Einige googeln hat vorgeschlagen, dass dieses Problem möglicherweise auf eine falsche Beziehung zwischen meinem Modell und einer anderen Entität zurückzuführen ist, aber ich habe nichtirgendein Beziehungen zu diesem Objekt. Es scheint zu 95% zu funktionieren, nur die anderen 5% scheitern.
Ich habe das Objekt vollständig aus dem Designer gelöscht und es über einen "aktualisierten" Server-Browser erneut hinzugefügt, und das hat das Problem nicht behoben.
Irgendwelche Ideen, was hier los ist?
Hier ist die vollständige Fehlermeldung und der Stack-Trace:
Der Index lag außerhalb des zulässigen Bereichs. Darf nicht negativ sein und kleiner als die Größe der Sammlung. Parametername: index at System.Data.Linq.SqlClient.SqlProvider.Execute (Ausdrucksabfrage, QueryInfo queryInfo, IObjectReaderFactory factory, Object [] parentArgs, Object [] userArgs, ICompiledSubQuery [] subQueries, Object lastResult) at System.Data.Linq .SqlClient.SqlProvider.ExecuteAll (Ausdrucksabfrage, QueryInfo [] queryInfos, IObjectReaderFactory-Factory, Object [] userArguments, ICompiledSubQuery [] subQueries) unter System.Data.Linq.SqlClient.SqlProvider.System.Data.LecuteProvider (Ausdrucksabfrage) bei System.Data.Linq.Table1.System.Linq.IQueryProvider.Execute[TResult](Expression expression) at System.Linq.Queryable.FirstOrDefault[TSource](IQueryable
1 source, Expression`1 predicate) at MyProject.FindUserByType (String typeId)
BEARBEITEN: Nachstehend finden Sie 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 zeigtFirstOrDefault
, aber ich habe den Fehler mit beiden dupliziertTake()
undToList()
. Die Stapelverfolgung ist zwischen all diesen identisch, einfach austauschbarFirstOrDefault/Take/ToList
. Die bewegen sich den Stapel nach untenSqlProvider.Execute
ist in der Tat identisch.