Exceção estranha de LINQ (índice fora dos limites)

Eu tenho uma mesa, vamos ligarUsers. Esta tabela tem uma única chave primária definida no SQL Server - um incremento automáticoint ID.

Às vezes, minhas consultas LINQ nesta tabela falham com um"Index was outside the range" erro - até mesmo a mais simples das consultas. A consulta em si não usa nenhum indexador.

Por exemplo:

User = Users.Take(1);

ou

IEnumerable<Users> = Users.ToList();

Ambas as consultas lançaram o mesmo erro. Usando o depurador do Visualizador para olhar a consulta gerada - eu copio e colo a consulta no SQL e funciona bem. Eu também clico em "executar" no visualizador e funciona bem. Mas a execução do código por si só gera esse erro. Eu não implemento nenhum dos métodos parciais na classe, então nada está acontecendo lá. Se eu reiniciar meu depurador, o problema desaparece, apenas para voltar a sua cabeça aleatoriamente algumas horas depois. Mais criticamente, vejo esse bug nos meus logs de erro do aplicativo em execução na produção.

Eu faço uma tonelada de LINQ no meu aplicativo, contra uma dúzia de entidades diferentes no meu banco de dados, mas só vejo esse problema em consultas relacionadas a uma entidade específica na minha tabela. Alguns googling sugeriram que esse problema pode estar relacionado a um relacionamento incorreto especificado entre o meu modelo e outra entidade, mas eu não tenhoqualquer relações com este objeto. Parece estar funcionando 95% do tempo, são apenas os outros 5% que falham.

Eu deletei completamente o objeto do designer e o adicionei novamente de um navegador de servidor "atualizado", o que não resolveu o problema.

Alguma idéia do que está acontecendo aqui?

Aqui está a mensagem de erro completa e o rastreamento de pilha:

O índice estava fora do intervalo. Deve ser não negativo e menor que o tamanho da coleção. Nome do parâmetro: índice em System.Data.Linq.SqlClient.SqlProvider.Execute (consulta Expression, QueryInfo queryInfo, fábrica IObjectReaderFactory, Object [] parentArgs, Object [] userArgs, ICompiledSubQuery [] subQueries, Object lastResult) em System.Data.Linq .SqlClient.SqlProvider.ExecuteAll (consulta Expression, QueryInfo [] queryInfos, fábrica IObjectReaderFactory, Object [] userArguments, ICompiledSubQuery [] subQueries) em System.Data.Linq.SqlClient.SqlProvider.System.Data.Linq.Provider.IProvider.Execute (Consulta de expressão) em System.Data.Linq.Table1.System.Linq.IQueryProvider.Execute[TResult](Expression expression) at System.Linq.Queryable.FirstOrDefault[TSource](IQueryable1 fonte, predicado Expression`1) em MyProject.FindUserByType (String typeId)

EDIT: Conforme solicitado, abaixo é uma cópia do esquema da tabela.

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: o rastreamento de pilha mostraFirstOrDefault, mas eu dupliquei o erro usando os doisTake() eToList(). O rastreamento de pilha é idêntico entre todos esses, simplesmente interchangnigFirstOrDefault/Take/ToList. O movimento para baixo da pilha paraSqlProvider.Execute é de fato idêntico.

questionAnswers(6)

yourAnswerToTheQuestion