2009-01-27 14 views
8

Pomimo tego, że jest jednym z najlepszych komunikatów o błędach, jakie kiedykolwiek widziałem (drugi tylko do „Ta operacja może zdestabilizować czynsz w kontinuum czasoprzestrzeni”), jest także jednym z najbardziej frustrujące.operacja może zdestabilizować Czas: LinqToSql

Opracowałem witrynę ASP.NET MVC, która działa doskonale poprzez VS2008. Działa doskonale na lokalnym serwerze IIS7 (Win2008Server & Win7beta), a także na innym hoście Win2008Server. Kilka dni temu przesłałem stronę do nowego hosta (Win2008Server) i uruchomiłem błąd "Operacja może zdestabilizować środowisko wykonawcze" za każdym razem, gdy jedna (i tylko jedna) z moich instrukcji LinqToSQL jest oceniana.

Oświadczenie LINQ w pytaniu została uproszczona do punktu zapomnienie, a jeszcze kiedy ja ocenić rezultat błąd występuje:

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

zdalnego hosta w pytaniu pracuje w pełnym zaufaniem, a są brak widocznych instrukcji zmiany (te dwa problemy pojawiły się w Google jako związane z błędem).

Podobny problem odnotowano na Operation could destabilize the runtime?, ale nie ma żadnych interfejsów używanych (że jestem świadomy).

Wszelkie pomysły?

--- Po prostu: ta tabela używa typu danych TIME i odwzorowuje właściwość TimeSpan. Najwyraźniej było to dostępne tylko w .NET 3.5 SP1. Czekam, aby dowiedzieć się, czy jest zainstalowany dodatek SP1 mój nowy host ...

+0

http://images.marketworks.com/hi/55/54565/st101_6.jpg? –

+0

Czy możesz podać więcej informacji o tym, czym jest calendarEvents, a może podać tekst polecenia dla tego zapytania? var text = db.GetCommand (wynik).CommandText Przypuszczam, że próbowałeś go z nazwą inną niż "event", ponieważ jest to słowo zarezerwowane. – DamienG

Odpowiedz

3

OK, końcowy wynik, że mój gospodarz prowadził moją witrynę na serwerze z .NET 3.5 zainstalowany (nie SP1), a jeden stół, który wykorzystał czas typ danych SQL zerwał z powyższego błędu. http://msdn.microsoft.com/en-us/library/bb386947.aspx stwierdza, że ​​LINQ to SQL obsługuje mapowanie tych nowych typów, począwszy od .NET 3.5 SP1.

Mój gospodarz łagodnie migrował moją witrynę do serwera .NET 3.5 SP1 i wszystko jest w porządku.

0

Co się dzieje, jeśli nie to

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

tak, że SQL jest oceniany przed wyjazdem do pętli?

+0

Pomyśl o tym - łamie się na poprzedniej linii (kiedykolwiek jest oceniany). –

1

event to słowo kluczowe. Zamiast tego użyj @event dla swojej nazwy zmiennej.

+0

Tak, przepraszam, moja zła. Właściwie nie użyłem "zdarzenia" w moim kodzie, po prostu nie myślałem, kiedy napisałem post. –

0

Warto zmienić ten kod, aby pobrać dane, a następnie sprawdzić, czy tablica ma wartości.

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

Jeśli zapytanie LINQ zwraca nic uniknąć błędu próbując dokończyć pętli

+0

Przepraszam za VB: P –

0

w poprzednich przypadkach, gdy widziałem występuje ten błąd, to ze względu na odbicie próbuje ustawić właściwość tylko do odczytu lub pole. Ponieważ Linq2Sql używa refleksji, domyślam się, że to jest problem. Powinieneś zbadać definicję typu klasy, której "e" jest instancją.

Upewnij się, że atrybuty są na odpowiednich elementach. I uważaj na klasy tylko w Linq2SQL.

Powiązane problemy