5

Zajmuję się analizą wydajności SQL wygenerowanej z Entity Framework 1 przy użyciu MS SQL 2008.Czy moja struktura Entity Framework wygenerowała dwa razy SQL?

Po uruchomieniu śledzenia w programie SQL Server Profiler 2008 zauważyłem coś, czego się nie spodziewałem. Dla każdego zapytania, które zostanie wykonane, otrzymam dwie instrukcje: RPC:Completed, oddzielone przez exec sp_reset_connection statement. Czy to oczekiwane zachowanie?

SQL Server Profiler Results

+0

Czy możesz opublikować kod, którego używasz? –

+0

@ajcvickers System, z którym mam do czynienia jest dość duży, więc dostarczenie kodu w stanie, w jakim jest, nie będzie możliwe, zajmie mi trochę czasu, aby razem stworzyć prototyp. Rozumiem, że to nie jest to, czego można by się spodziewać? – Tr1stan

+0

Za każdym razem, gdy wyliczane jest zapytanie LINQ do encji (np. Za pomocą ToList()), zapytanie jest wykonywane względem bazy danych. Zastanawiałem się, czy to było to. –

Odpowiedz

2

Odpowiedź: Tak

Okazuje się, że był to "funkcja" w AutoMapper który był przyczyną mojego problemu.

Zobacz tutaj: When Mapping an IQueryable I see the database getting hit twice in my profiler.

Niestety ponieważ używam wersji 1.1 (.NET 3.5) to nie wygląda jak to się dzieje, aby uzyskać stałe.

Rozwiązanie: wezwanie .ToList() na IQueryable obiektu przed przekazaniem go do metody Mapper.Map(). Umożliwienie Mapperowi wyliczenia obiektu powoduje podwójne wykonanie.