Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Program Entity Framework Core używa zapytania zintegrowanego języka (LINQ) do wykonywania zapytań dotyczących danych z bazy danych. LINQ umożliwia używanie języka C# (lub wybranego języka .NET) do pisania silnie typiowanych zapytań na podstawie pochodnego kontekstu i klas jednostek.
Uwaga
Ten artykuł jest nieaktualny i niektóre z nich należy zaktualizować, aby uwzględnić zmiany wprowadzone w projekcie potoku zapytania. Jeśli masz jakiekolwiek wątpliwości co do jakiegokolwiek zachowania wymienionego tutaj, zadaj pytanie.
Żywotność zapytania
Poniższy opis zawiera ogólne omówienie procesu, przez który przechodzi każde zapytanie.
- Zapytanie LINQ jest przetwarzane przez program Entity Framework Core w celu utworzenia reprezentacji gotowej do przetworzenia przez dostawcę bazy danych
- Wynik jest buforowany tak, aby przetwarzanie nie było konieczne za każdym razem, gdy zapytanie jest wykonywane
- Wynik jest przekazywany do dostawcy bazy danych
- Dostawca bazy danych określa, które części zapytania można ocenić w bazie danych
- Te części zapytania są tłumaczone na język zapytań specyficzny dla bazy danych (na przykład SQL dla relacyjnej bazy danych)
- Zapytanie jest wysyłane do bazy danych i zwracany zestaw wyników (wyniki są wartościami z bazy danych, a nie wystąpieniami jednostek)
- Dla każdego elementu w zestawie wyników
- Jeśli zapytanie jest zapytaniem śledzącym, program EF sprawdza, czy dane reprezentują jednostkę już w monitorze zmian dla wystąpienia kontekstu
- Jeśli tak, zostanie zwrócona istniejąca jednostka
- Jeśli nie, zostanie utworzona nowa jednostka, zostanie skonfigurowane śledzenie zmian, a nowa jednostka zostanie zwrócona
- Jeśli zapytanie nie jest zapytaniem śledzenia, nowa jednostka jest zawsze tworzona i zwracana
- Jeśli zapytanie jest zapytaniem śledzącym, program EF sprawdza, czy dane reprezentują jednostkę już w monitorze zmian dla wystąpienia kontekstu
Gdy zapytania są wykonywane
Podczas wywoływania operatorów LINQ wystarczy utworzyć reprezentację zapytania w pamięci. Zapytanie jest wysyłane tylko do bazy danych, gdy wyniki są używane.
Najczęstsze operacje, które powodują wysłanie zapytania do bazy danych, to:
- Iterowanie wyników w
forpętli - Używanie operatora, takiego jak
ToList,ToArray,Single,Countlub równoważne przeciążenia asynchroniczne
Ostrzeżenie
Zawsze weryfikuj dane wejściowe użytkownika: podczas gdy program EF Core chroni przed atakami polegającymi na wstrzyknięciu kodu SQL przy użyciu parametrów i ucieczki literałów w zapytaniach, nie weryfikuje danych wejściowych. Odpowiednią walidację zgodnie z wymaganiami aplikacji należy wykonać przed zastosowaniem wartości z niezauwierzonych źródeł w zapytaniach LINQ, przypisanych do właściwości jednostki lub przekazanych do innych interfejsów API platformy EF Core. Obejmuje to wszystkie dane wejściowe użytkownika używane do dynamicznego konstruowania zapytań. Nawet w przypadku korzystania z linQ, jeśli akceptujesz dane wejściowe użytkownika do kompilowania wyrażeń, musisz upewnić się, że można konstruować tylko zamierzone wyrażenia.