Странное исключение LINQ (индекс вне границ)

У меня есть стол, мы позвонимUsers, Эта таблица имеет один первичный ключ, определенный в SQL Server - автоинкрементint ID.

Иногда мои LINQ-запросы к этой таблице терпят неудачу с"Index was outside the range" Ошибка - даже самый простой из запросов. Сам запрос не использует никаких индексаторов.

Например:

User = Users.Take(1);

или же

IEnumerable<Users> = Users.ToList();

Оба запроса выдавали одну и ту же ошибку. С помощью отладчика Visualizer для просмотра сгенерированного запроса - я копирую и вставляю запрос в SQL, и он работает нормально. Я также нажимаю «выполнить» на визуализаторе, и он отлично работает. Но выполнение кода само по себе выдает эту ошибку. Я не реализую какие-либо частичные методы в классе, поэтому там ничего не происходит. Если я перезагружаю свой отладчик, проблема исчезает, но через несколько часов случайно снова поднимает голову. Что еще более важно, я вижу эту ошибку в моих журналах ошибок из приложения, запущенного в производство.

Я использую тонну LINQ в своем приложении против дюжины или около того разных сущностей в моей базе данных, но я вижу эту проблему только в запросах, связанных с определенной сущностью в моей таблице. Некоторые из Google предположили, что эта проблема может быть связана с неправильными отношениями, указанными между моей моделью и другим объектом, но у меня нетЛюбые отношения с этим объектом. Кажется, он работает в 95% случаев, а остальные 5% терпят неудачу.

Я полностью удалил объект из конструктора и повторно добавил его из «обновленного» браузера сервера, и это не решило проблему.

Есть идеи, что здесь происходит?

Вот полное сообщение об ошибке и трассировка стека:

Индекс был вне диапазона. Должен быть неотрицательным и меньшим, чем размер коллекции. Имя параметра: индекс в System.Data.Linq.SqlClient.SqlProvider.Execute (запрос выражения, QueryInfo queryInfo, фабрика IObjectReaderFactory, Object [] parentArgs, Object [] userArgs, ICompiledSubQuery [] subQueries, Object lastResult, объект lastResult) в System.Data.L .SqlClient.SqlProvider.ExecuteAll (запрос выражения, QueryInfo [] queryInfos, фабрика IObjectReaderFactory, объект [] userArguments, subQueries ICompiledSubQuery []) в System.Data.Linq.SqlClient.SqlProvider.inide. (Запрос выражения) в System.Data.Linq.Table1.System.Linq.IQueryProvider.Execute[TResult](Expression expression) at System.Linq.Queryable.FirstOrDefault[TSource](IQueryable1 источник, предикат Expression`1) в MyProject.FindUserByType (String typeId)

РЕДАКТИРОВАТЬ: В соответствии с просьбой ниже приведена копия схемы таблицы.

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]

РЕДАКТИРОВАТЬ: трассировки стека показываетFirstOrDefault, но я продублировал ошибку, используя обаTake() а такжеToList(), Трассировка стека идентична всем этим, просто взаимообменFirstOrDefault/Take/ToList, Перемещение вниз по стекуSqlProvider.Execute на самом деле идентичен.

Ответы на вопрос(6)

Ваш ответ на вопрос