Операция может дестабилизировать среду выполнения: LinqToSQL - PullRequest
8 голосов
/ 27 января 2009

Несмотря на то, что это одно из лучших сообщений об ошибках, которые я когда-либо видел (второе - «Эта операция может дестабилизировать арендную плату в пространственно-временном континууме»), оно также является одним из самых неприятных.

Я разработал сайт ASP.NET MVC, который прекрасно работает через VS2008. Он отлично работает на локальном сервере IIS7 (Win2008Server & Win7beta), а также на другом хосте Win2008Server. Несколько дней назад я загрузил сайт на новый хост (Win2008Server) и столкнулся с ошибкой «Операция может дестабилизировать среду выполнения» всякий раз, когда оценивается один (и только один) из моих операторов LinqToSQL.

Соответствующее утверждение Linq было упрощено до неясности, и все же всякий раз, когда я оцениваю результат, возникает ошибка:

var result = from e in db.calendarEvents select e;
foreach (var event in result)  // error occurs on this line
{
    ...
}

Рассматриваемый удаленный хост работает с полным доверием, и в нем нет операторов переключения (эти две проблемы возникли в Google как связанные с ошибкой).

О подобной проблеме сообщили в Операция может дестабилизировать среду выполнения? , но нет используемых интерфейсов (о которых я знаю).

Есть идеи?

--- Просто пауза: в рассматриваемой таблице используется тип данных TIME и сопоставляется со свойством TimeSpan. Видимо, это было доступно только в .NET 3.5 SP1. Я жду, чтобы узнать, установлен ли на моем новом хосте SP1 ...

Ответы [ 5 ]

3 голосов
/ 28 января 2009

ОК, конечный результат состоял в том, что мой хост запускал мой сайт на сервере с установленным .NET 3.5 (не SP1), и в одной таблице, в которой использовался тип данных TIME SQL, произошла ошибка из-за вышеуказанной ошибки. http://msdn.microsoft.com/en-us/library/bb386947.aspx утверждает, что LINQ to SQL поддерживает сопоставление этих новых типов, начиная с .NET 3.5 SP1.

Мой хост любезно перенес мой сайт на сервер .NET 3.5 SP1, и все хорошо.

1 голос
/ 27 января 2009

событие - ключевое слово. Вместо этого используйте @event в качестве имени переменной.

0 голосов
/ 03 ноября 2010

В прошлых случаях, когда я видел эту ошибку, это происходило из-за попытки отражения установить свойство или поле только для чтения. Поскольку Linq2Sql использует рефлексию, я думаю, что это проблема. Вам следует изучить определение типа класса, экземпляром которого является e.

Убедитесь, что атрибуты находятся на правильных членах. И остерегайтесь только для чтения в классах Linq2SQL.

0 голосов
/ 28 января 2009

Возможно, стоит изменить этот код для извлечения данных, а затем проверить, что массив имеет значения.

dim result = (from e in db.calendarEvents).toArray
If not results is nothing andalso results.length > 0 then
   'Do Loop
End If

Если запрос linq ничего не возвращает, вы избегаете ошибки при попытке завершить цикл for

0 голосов
/ 27 января 2009

Что произойдет, если вы сделаете это

var result = (from e in db.calendarEvents select e).ToList();
foreach (var event in result)  // error occurs on this line
{
    ...
}

чтобы SQL-код оценивался до того, как вы перейдете в цикл?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...