Wyjątkowy wyjątek LINQ (indeks poza zakresem)

Mam stolik, zadzwonimyUsers. Ta tabela zawiera pojedynczy klucz podstawowy zdefiniowany w SQL Server - przyrost automatycznyint ID.

Czasami moje zapytania LINQ przeciwko tej tabeli kończą się niepowodzeniem"Index was outside the range" błąd - nawet najprostsze zapytania. Samo zapytanie nie używa żadnych indeksatorów.

Na przykład:

User = Users.Take(1);

lub

IEnumerable<Users> = Users.ToList();

Oba zapytania rzuciły ten sam błąd. Używając Visualizera do debugera, spójrz na wygenerowane zapytanie - kopiuję i wklejam zapytanie w SQL i działa poprawnie. Klikam też „execute” na wizualizatorze i działa dobrze. Ale samo wykonanie kodu powoduje ten błąd. Nie implementuję żadnej z częściowych metod na klasie, więc nic się tam nie dzieje. Jeśli zrestartuję swój debugger, problem zniknie, tylko kilka godzin później ponownie wyląduję. Co ważniejsze, widzę ten błąd w dziennikach błędów aplikacji uruchomionej w produkcji.

Robię mnóstwo LINQ w mojej aplikacji, przeciwko kilkunastu różnym podmiotom w mojej bazie danych, ale widzę ten problem tylko w zapytaniach związanych z konkretną jednostką w mojej tabeli. Niektóre googlingi sugerują, że ten problem może być związany z niepoprawnym określeniem relacji między moim modelem a innym obiektem, ale nie mamkażdy relacje z tym obiektem. Wydaje się, że działa w 95% przypadków, tylko pozostałe 5% zawodzi.

Całkowicie usunąłem obiekt od projektanta i dodałem go ponownie z „odświeżonej” przeglądarki serwera, co nie rozwiązało problemu.

Jakieś pomysły, co tu się dzieje?

Oto pełny komunikat o błędzie i ślad stosu:

Indeks był poza zakresem. Musi być nieujemny i mniejszy niż rozmiar kolekcji. Nazwa parametru: index at System.Data.Linq.SqlClient.SqlProvider.Execute (zapytanie Expression, QueryInfo queryInfo, fabryka IObjectReaderFactory, Object [] parentArgs, Object [] userArgs, ICompiledSubQuery [] subQueries, Object lastResult) w System.Data.Linq .SqlClient.SqlProvider.ExecuteAll (zapytanie o wyrażenie, QueryInfo [] queryInfos, fabryka IObjectReaderFactory, Object [] userArguments, ICompiledSubQuery [] podkwerendy) w System.Data.Linq.SqlClient.SqlProvider.System.Data.Linq.Provider.IProvider.Execute (Zapytanie wyrażenia) w System.Data.Linq.Table1.System.Linq.IQueryProvider.Execute[TResult](Expression expression) at System.Linq.Queryable.FirstOrDefault[TSource](IQueryable1 źródło, predykat Expression`1) w MyProject.FindUserByType (String typeId)

EDYCJA: Zgodnie z żądaniem poniżej znajduje się kopia schematu tabeli.

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: Pokazuje ślad stosuFirstOrDefault, ale zduplikowałem błąd, używając obuTake() iToList(). Ślad stosu jest identyczny między tymi wszystkimi, po prostu interchangnigFirstOrDefault/Take/ToList. Ruch w dół stosu doSqlProvider.Execute jest w rzeczywistości identyczny.

questionAnswers(6)

yourAnswerToTheQuestion