2013-07-15 8 views
5

Mam bardzo podstawowe zapytanie Linq, które nie zwraca ten sam wynik, jeśli I wykonać go lokalnie w Visual Studio lub na serwerze IIS - ale zawsze kierowania na to samo Serwer bazy danych. Użyłem programu SQL Server Profiler do prześledzenia prawdziwego zapytania SQL i okazało się, że nie było to samo podczas wykonywania lokalnie lub zdalnie!Entity Framework: kwerenda LINQ generuje różne SQL między lokalnym wykonaniem i wykonanie serwera

Lokalnie używa łączenia lewego, natomiast zdalnie korzysta z łączenia wewnętrznego - i dlatego lokalnie zwraca rekord, ale nie zdalnie. Myślę, że dobrym zachowaniem byłby drugi, ponieważ zdefiniowałem nieprzeznaczalny klucz obcy między TableA i TableB. Poniżej znajduje się prośba LINQ:

from a in TableA.Include("TableB.TableC") 
where a.Id == someId 
select a; 

W rzeczywistości najpierw dołączyć zawsze tłumaczone na sprzężenie wewnętrzne, ale drugi jest po lewej przyłączyć gdy wykonywane lokalnie.

Ale moim priorytetem jest wiedzieć, dlaczego generuje on inne zapytanie lokalnie i zdalnie. Wersje szkieletu są takie same, wersje frameworkowe Entity są takie same (skopiowane lokalnie) ... Coś musi być innego, ale nie mogę tego znaleźć! Czy masz jakąś wskazówkę?

Z góry dziękuję.

+0

Czy używasz tej samej aplikacji? Jedyną inną rzeczą jest wartość ciągu połączenia? –

+0

Tak ta sama aplikacja i ten sam ciąg połączenia – user1756338

+0

Masz różne instancje aplikacji. Upewnij się, że wdrożyłeś te same złożenia na serwerze zdalnym –

Odpowiedz

1

W końcu problemem była wersja ramowa. Myślałem, że jest to ta sama wersja .NET, ale nie była zdalna: 4.0.30319.1 lokalnie i 4.0.30319.17929. Wydaje się, że 4.0.30319.17929 to .NET Framework 4.5, więc jest czymś więcej niż inną wersją. Odinstalowałem wersję 4.5 i ponownie zainstalowałem wersję 4.0 na serwerze To dziwne, ponieważ ponownie ją zainstalowało w folderze C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319, ale wersje plików są teraz poprawne, 4.0.30319.1 (plik wersje były wcześniej 4.0.30319.17929) Następnie zmieniłem wersję .NET w puli aplikacji IIS. Został zresetowany do wersji 2.0 po odinstalowaniu, więc zresetowałem do wersji 4 i zrestartowałem pulę (ale nadal wyświetla ona wersję v4.0.30319 w puli aplikacji ...). A teraz działa jak lokalnie, robi jedno sprzężenie wewnętrzne, a następnie lewe sprzężenie.

Myślę, że jest to poprawka dodana w wersji 4.5, ponieważ powinna używać wewnętrznego sprzężenia z powodu nieprzepisowych kluczy obcych (zauważ, że klucz podstawowy składa się z kilku kolumn) Ale tego rodzaju zmiana byłaby trudna wykryć podczas aktualizacji do 4.5 ...

Powiązane problemy