Tengo una tabla, llamaremos al Users
. Esta tabla tiene una sola clave principal definida en SQL Server - una autoincrement int ID
.Excepción de LINQ extraño (Índice fuera de límites)
A veces, mis consultas LINQ contra esta tabla fallan con un error "Index was outside the range"
- incluso el más simple de las consultas. La consulta en sí no usa ningún indexador.
Por ejemplo:
User = Users.Take(1);
o
IEnumerable<Users> = Users.ToList();
Tanto de las consultas arrojó el mismo error. Usando el depurador Visualizer 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 ejecutar el código por sí solo arroja este error. No implemento ninguno de los métodos parciales en la clase, por lo que no está sucediendo nada allí. Si reinicio mi depurador, el problema desaparece, solo para volver atrás de nuevo al azar unas horas más tarde. Más críticamente, 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, en contra de una docena de diferentes entidades en mi base de datos, pero sólo ver este problema en búsquedas similares a una entidad específica en mi mesa. 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 tengo ninguna relación con este objeto. Parece estar funcionando el 95% del tiempo, es solo el otro 5% que falla.
He eliminado por completo 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 y Seguimiento de la pila completo:
índice estaba fuera del rango. Debe ser no negativo y menor que el tamaño de de la colección. Nombre de parámetro: índice en System.Data.Linq.SqlClient.SqlProvider.Execute (consulta Expresión, QueryInfo QueryInfo, fábrica IObjectReaderFactory, Object [] parentArgs, userArgs [], ICompiledSubQuery [] SUBCONSULTAS objeto, objeto LASTRESULT) en System.Data.Linq.SqlClient.SqlProvider.ExecuteAll (consulta Expresión, QueryInfo [] queryInfos, fábrica IObjectReaderFactory, Object [] userArguments, ICompiledSubQuery [] sUBCONSULTAS) en System.Data.Linq.SqlClient.SqlProvider.System.Data .Linq.Provider.IProvider.Execute (Expresión consulta) en System.Data.Linq.Table
1.System.Linq.IQueryProvider.Execute[TResult](Expression expression) at System.Linq.Queryable.FirstOrDefault[TSource](IQueryable
1 fuente, Expresión`1 predicado) en MyProject.FindUserByType (String typeId)
EDIT: Conforme a lo solicitado, a continuación es 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]
EDIT: El seguimiento de la pila muestra FirstOrDefault
, pero duplica el error utilizando tanto Take()
y ToList()
. El seguimiento de la pila es idéntico entre todos estos, simplemente intercangnig FirstOrDefault/Take/ToList
. El movimiento hacia abajo de la pila a SqlProvider.Execute
es, de hecho, idéntico.
No tengo idea de lo que está pasando, ¡pero es fascinante! Si todo lo demás falla, podría probar la lista del Proyecto General Linq: http://forums.microsoft.com/MSDN/ShowForum.aspx?ForumID=123&SiteID=1 –
Podría ser útil si pudiéramos ver la definición de la tabla. – KyleLanser
(mssql -> Bases de datos -> the_db -> Tablas -> tabla_favoritos -> clic derecho -> Tabla de scripts como -> Crear a) – KyleLanser