A lekérdezések működése

Az Entity Framework Core a Language Integrated Query (LINQ) használatával kérdezi le az adatokat az adatbázisból. A LINQ lehetővé teszi, hogy a C# (vagy a választott .NET-nyelv) használatával erősen beírt lekérdezéseket írjon a származtatott környezet és entitásosztályok alapján.

Megjegyzés:

Ez a cikk elavult, és egyes részeit frissíteni kell, hogy figyelembe vegyék a lekérdezési folyamat tervezése során bekövetkezett változásokat. Ha kétségei vannak az itt említett viselkedéssel kapcsolatban, kérjük, tegyen fel egy kérdést.

Egy lekérdezés élettartama

Az alábbi leírás magas szintű áttekintést nyújt az egyes lekérdezések folyamatáról.

  1. A LINQ-lekérdezést az Entity Framework Core dolgozza fel egy olyan reprezentáció létrehozásához, amely készen áll az adatbázis-szolgáltató általi feldolgozásra
    1. Az eredmény gyorsítótárazva van, így ezt a feldolgozást nem kell minden alkalommal elvégezni, amikor a lekérdezést végrehajtják
  2. Az eredmény átadása az adatbázis-szolgáltatónak
    1. Az adatbázis-szolgáltató azonosítja, hogy a lekérdezés mely részei értékelhetők ki az adatbázisban
    2. A lekérdezés ezen részeit a rendszer adatbázis-specifikus lekérdezési nyelvre fordítja le (például relációs adatbázis SQL-ére).
    3. A rendszer egy lekérdezést küld az adatbázisnak, és visszaadja az eredményhalmazt (az eredmények az adatbázis értékei, nem entitáspéldányok)
  3. Az eredményhalmaz minden eleméhez
    1. Ha a lekérdezés nyomkövetési lekérdezés, akkor az EF ellenőrzi, hogy az adatok egy olyan entitást jelölnek-e, amely már szerepel a környezeti példány változáskövetőjében
      • Ha igen, a meglévő entitás lesz visszaadva
      • Ha nem, létrejön egy új entitás, be van állítva a változáskövetés, és a rendszer visszaadja az új entitást
    2. Ha a lekérdezés nem követési lekérdezés, akkor a rendszer mindig létrehoz és visszaad egy új entitást

Lekérdezések végrehajtásakor

Amikor a LINQ-operátorokat hívja meg, egyszerűen a lekérdezés memóriabeli ábrázolását építi fel. A lekérdezés csak az eredmények felhasználásakor lesz elküldve az adatbázisnak.

A lekérdezés adatbázisba való elküldését eredményező leggyakoribb műveletek a következők:

  • Az eredmények iterálása egy for hurokban
  • Egy operátor, például ToList, ToArray, Single, Count, vagy az azzal egyenértékű aszinkron túlterhelések használata

Figyelmeztetés

Mindig ellenőrizze a felhasználói bemenetet: Bár az EF Core paraméterekkel véd az SQL-injektálási támadások ellen, és a lekérdezések során a literálok elől menekül, nem ellenőrzi a bemeneteket. Az alkalmazás követelményeinek megfelelően megfelelő ellenőrzést kell végrehajtani, mielőtt a nem megbízható forrásokból származó értékek felhasználhatók a LINQ-lekérdezésekben, entitástulajdonságokhoz rendelve vagy más EF Core API-knak átadva. Ez magában foglalja a lekérdezések dinamikus létrehozásához használt felhasználói bemeneteket is. Még a LINQ használata esetén is, ha elfogad egy felhasználói bemenetet a kifejezések létrehozásához, meg kell győződnie arról, hogy csak a kívánt kifejezések hozhatók létre.