2011-01-26 7 views
5

Szczegóły App: C#, ASP.NET MVC, SQL Server 2008 (tej samej wersji & poziom SP), LINQ do SQL ORM"Określone rzutowanie jest nieprawidłowe" Błąd podczas zapisywania LINQ do SQL podmiot

Próbuję zdiagnozować wyjątek Otrzymuję:

"Specified cast is not valid." at System.Data.Linq.IdentityManager.StandardIdentityManager.SingleKeyManage`2.TryCreateKeyFromValues(Object[] values, V& v)
at System.Data.Linq.IdentityManager.StandardIdentityManager.IdentityCache`2.Find(Object[] keyValues)
at System.Data.Linq.IdentityManager.StandardIdentityManager.Find(MetaType type, Object[] keyValues)
at System.Data.Linq.CommonDataServices.GetCachedObject(MetaType type, Object[] keyValues)
at System.Data.Linq.ChangeProcessor.GetOtherItem(MetaAssociation assoc, Object instance)
at System.Data.Linq.ChangeProcessor.BuildEdgeMaps()
at System.Data.Linq.ChangeProcessor.SubmitChanges(ConflictMode failureMode)
at System.Data.Linq.DataContext.SubmitChanges(ConflictMode failureMode)
at System.Data.Linq.DataContext.SubmitChanges()
at Repository.Save() at etc....

problemem jest to, że występuje tylko na naszych serwerach, a nie na naszych lokalnych polach rozwojowych. Śledziłem to do jednej właściwości, którą modyfikujemy:

event.SalesForceId = "701Q0000000AOTIIA4"; 

Jeśli skomentuję tę linię, wszystko działa poprawnie.

Próbowałem:

1) woskowanie cały kod na serwerze i przesunięcia. Ten sam problem.
2) Wyciąganie kopii bazy danych serwera i wypróbowywanie jej lokalnie. Działa w porządku.
3) Próbuję innego środowiska IIS, które ustawiliśmy w tym samym oknie. Ten sam problem.
4) Fizyczne porównywanie (za pomocą AdeptSQL) zarówno schematów lokalnych, jak i zdalnych. Bez różnic.
5) Weryfikacja typów danych obu kolumn (lokalnych i zdalnych) jest taka sama. Również ta kolumna jest FK do innej tabeli. Zweryfikowałem, że oba są tego samego typu danych, aż do sortowania.

Serwer to Windows Server 2008, a lokalny to Windows 7 x64. Oba mają ustawione wszystkie ważne aktualizacje.

Jedyne o czym mogę myśleć to być może dlatego, że baza danych i serwer WWW znajdują się na różnych polach, które mogą być problemem? W przeciwnym razie jestem kompletnie zakłopotany.

Wszelkie pomysły?

+0

Jaki jest typ "V" w tym ostatnim wywołaniu? Użyj debuggera, aby to zobaczyć. – leppie

+1

Również .NET 3.5 lub 4.0? – leppie

+0

To jest .net 3.5, a nie 4, ze wszystkimi zastosowanymi dodatkami Service Pack. Ponadto nie mogę użyć debuggera, aby go przejrzeć, ponieważ znajduje się on na serwerze. Zdalne debugowanie również nie wchodzi w grę. – gcaprio

Odpowiedz

7
+1

Ty wspaniały człowieku, to było to. Dziękuję bardzo. – gcaprio

+0

Pobrałem 963657 i próbowałem go zainstalować, ale powoduje to następujący błąd: Żaden z produktów, których dotyczy ta aktualizacja oprogramowania, nie jest zainstalowany na tym komputerze. Kliknij Anuluj, aby opuścić konfigurację. Dzieje się tak, ponieważ 963657 jest dla framework 3.5 SP1, ale mam framework 3.5. –

1

Jeśli klucz istnieje określona zależność i przedmiotem jest już utworzony następnie LINQ podana ścieżka związek (obj.Foo = new Foo { ... }) muszą być stosowane. (Użyłbym podanych relacji nawet dla nowych obiektów). Niespełnienie tego spowoduje wynik - mówienie z doświadczenia - w takich "przypadkowych" błędach.

Inną kwestią, która może powodować (lub bardzo podobny błąd), jest odwróconych kolumn relacji, dla relacji złożonych. Jeśli jednak wygenerowany kod jest taki sam, a DB jest taki sam (na prawdę, na obu kontach), to podejrzewam, że pierwszym powodem jest winowajca.

Szczęśliwe skoki w dętkach SQL-to-LINQ.

+0

Interesujące, ale zwykle miałem "normalne" 'NullReferenceException' w tych przypadkach IIRC. Jeśli uda nam się ustalić, dlaczego nie jest on w stanie obsłużyć (do 'string' zakładam) byłoby to pomocne. – leppie

+1

@leppie Chętnie zrezygnuję z mojej ulubionej skarpetki, jeśli znajdę "książkę kucharską" do radzenia sobie z błędami LINQ: -/ –

+0

+1 Ja też chcę. Zwykle, jeśli mogę dołączyć do procesu i użyć debuggera, nie jest zbyt trudno dowiedzieć się, co dzieje się wewnętrznie (z niewielką pomocą od Reflectora oczywiście), a następnie wrócić do problemu (patrząc na stan/locals w zarządzanym stosie). – leppie

Powiązane problemy