Extraña excepción de LINQ (Índice fuera de límites)

Tengo una mesa, la llamaremosUsers. Esta tabla tiene una clave principal única definida en SQL Server: un autoincrementoint ID.

A veces, mis consultas LINQ contra esta tabla fallan con un"Index was outside the range" error - incluso la más simple de las consultas. La consulta en sí no utiliza ningún indexador.

Por ejemplo:

User = Users.Take(1);

o

IEnumerable<Users> = Users.ToList();

Ambas consultas arrojaron el mismo error. Usando el visualizador del depurador para ver la consulta generada, copio y pego la consulta en SQL y funciona bien. También hago clic en "ejecutar" en el visualizador y funciona bien. Pero la ejecución del código por sí solo produce este error. No implemento ninguno de los métodos parciales en la clase, por lo que no ocurre nada allí. Si reinicio mi depurador, el problema desaparece, solo para volver atrás de forma aleatoria unas horas más tarde. Más crítico aún, veo este error en mis registros de errores de la aplicación que se ejecuta en producción.

Hago una tonelada de LINQ en mi aplicación contra una docena de entidades diferentes en mi base de datos, pero solo veo este problema en consultas relacionadas con una entidad específica en mi tabla. Algunos google han sugerido que este problema podría estar relacionado con una relación incorrecta especificada entre mi modelo y otra entidad, pero no tengoalguna relaciones con este objeto. Parece que funciona el 95% del tiempo, solo el 5% restante falla.

He eliminado completamente el objeto del diseñador y lo he vuelto a agregar desde un navegador de servidor "actualizado", y eso no solucionó el problema.

¿Alguna idea de lo que está pasando aquí?

Aquí está el mensaje de error completo y el seguimiento de la pila:

El índice estaba fuera de rango. Debe ser no negativo y menor que el tamaño de la colección. Nombre del parámetro: índice en System.Data.Linq.SqlClient.SqlProvider.Execute (consulta de expresión, QueryInfo queryInfo, fábrica IObjectReaderFactory, Object [] parentArgs, Object [] userArgs, ICompiledSubQuery [] subQueries, Object lastResult) en System.Data. .SqlClient.SqlProvider.ExecuteAll (consulta de expresión, QueryInfo [] queryInfos, IObjectReaderFactory factory, Object [] userArguments, ICompiledSubQuery [...] [...] [...] [...] [...] [...] [...]. (Consulta de expresión) en System.Data.Linq.Table1.System.Linq.IQueryProvider.Execute[TResult](Expression expression) at System.Linq.Queryable.FirstOrDefault[TSource](IQueryable1 fuente, Expresión `1 predicado) en MyProject.FindUserByType (String typeId)

EDITAR: según lo solicitado, a continuación se muestra una copia del esquema de la tabla.

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]

EDITAR: El seguimiento de la pila muestraFirstOrDefault, pero duplicé el error usando ambosTake() yToList(). El seguimiento de la pila es idéntico entre todos estos, simplemente intercambiarFirstOrDefault/Take/ToList. El movimiento hacia abajo de la pila paraSqlProvider.Execute de hecho es idéntico.

Respuestas a la pregunta(6)

Su respuesta a la pregunta