Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Az adatbázisfüggvények a C# metódusok adatbázis-megfelelői. Egy adatbázisfüggvény meghívható nulla vagy több paraméterrel, és a paraméterértékek alapján számítja ki az eredményt. A lekérdezéshez SQL-t használó adatbázisok többsége támogatja az adatbázisfüggvényeket. Az EF Core-lekérdezésfordítás által generált SQL tehát lehetővé teszi az adatbázisfüggvények meghívását is. A C#-metódusoknak nem kell szigorúan az EF Core adatbázisfüggvényeire fordítaniuk.
- Előfordulhat, hogy a C# metódus nem rendelkezik egyenértékű adatbázisfüggvényrel.
- A String.IsNullOrEmpty metódus inkább nullával való ellenőrzéssé és az adatbázis üres sztringjével való összehasonlítássá alakul, nem pedig egy függvénnyé.
- String.Equals(String, StringComparison) a metódus nem rendelkezik adatbázis-megfelelővel, mivel a sztringek összehasonlítását nem lehet egyszerűen ábrázolni vagy utánozni egy adatbázisban.
- Előfordulhat, hogy az adatbázisfüggvények nem rendelkeznek egyenértékű C# metódussal. A
??C# operátora, amely nem rendelkezik metódussal, azCOALESCEadatbázis függvényére fordít.
Az adatbázis függvények típusai
Az EF Core SQL-generáció támogatja az adatbázisokban használható függvények egy részét. Ennek a korlátozásnak az az oka, hogy egy lekérdezést a LINQ-ban kell kifejezni az adott adatbázisfüggvény segítségével. Emellett minden adatbázis különböző mértékben támogatja az adatbázisfüggvényeket, így az EF Core egy közös részhalmazt biztosít. Az adatbázis-szolgáltató szabadon bővítheti az EF Core SQL-generációt a további minták támogatásához. Az alábbi adatbázisfüggvények típusait támogatja az EF Core, és egyedileg azonosítja azokat. Ezek a kifejezések segítenek megérteni, hogy milyen fordítások jönnek létre az EF Core-szolgáltatókkal.
Beépített és felhasználó által definiált függvények
A beépített függvényeket az adatbázis előre definiált módon tartalmazza, míg a felhasználó által definiált függvényeket a felhasználó explicit módon hozza létre az adatbázisban. Amikor az EF Core lefordítja a lekérdezéseket adatbázisfüggvények használatára, beépített függvényeket használ annak biztosítása érdekében, hogy a függvény mindig elérhető legyen az adatbázisban. Egyes adatbázisokban a beépített függvények megkülönböztetése szükséges az SQL helyes létrehozásához. Az SqlServer például megköveteli, hogy a rendszer minden felhasználó által definiált függvényt séma-minősített névvel hívjon meg. Az SqlServer beépített függvényei azonban nem rendelkeznek sémával. A PostgreSQL a public sémában definiálja a beépített függvényeket, de ezek séma-minősített nevekkel hívhatók meg.
Összesítés és skaláris és táblaértékelt függvények
- A skaláris függvények paraméterként skaláris értékeket – például egész számokat vagy sztringeket – vesznek fel, és eredményként skaláris értéket ad vissza. A skaláris függvények bárhol használhatók az SQL-ben, ahol skaláris érték adható át.
- Az aggregátumfüggvények paraméterként a skaláris értékek adatfolyamát veszik figyelembe, és eredményként skaláris értéket ad vissza. Az összesítő függvények a teljes lekérdezési eredményhalmazra vagy az operátor által létrehozott értékek egy csoportjára lesznek alkalmazva
GROUP BY. - A táblaértékelt függvények paraméter(ek)ként veszik fel a skaláris értékeket, és ennek eredményeként sorfolyamot ad vissza. A táblaértékelt függvények táblaforrásként használatosak a záradékban
FROM.
Niladikus függvények
A niladikus függvények olyan speciális adatbázisfüggvények, amelyek nem rendelkeznek paraméterekkel, és zárójel nélkül kell meghívni. Hasonlítanak egy C#-példány tulajdonság-/mezőhozzáféréséhez. A niladikus függvények eltérnek a paraméter nélküli függvényektől, mivel az utóbbi üres zárójelet igényel. Nincs olyan speciális név az adatbázisfüggvényekhez, amelyek mindig zárójelet igényelnek. Az adatbázisfüggvények paraméterszámon alapuló egy másik részhalmaza a variadikus függvények. A variadikus függvények meghívása különböző számú paramétert vehet igénybe.
Adatbázisfüggvény-leképezések az EF Core-ban
Az EF Core három különböző leképezési módot támogat a C# függvények és az adatbázisfüggvények között.
Beépített függvényleképezés
Alapértelmezés szerint az EF Core-szolgáltatók különböző beépített függvényekhez biztosítanak leképezéseket primitív típusok esetében. Például String.ToLower() az SqlServerben fordítja LOWER le. Ezzel a funkcióval a felhasználók zökkenőmentesen írhatnak lekérdezéseket a LINQ-ban. Általában olyan fordítást biztosítunk az adatbázisban, amely ugyanazt az eredményt adja, mint amit a C# függvény biztosít az ügyféloldalon. Néha ennek eléréséhez a tényleges fordítás bonyolultabb lehet, mint egy adatbázisfüggvény. Bizonyos esetekben a C# szemantikája helyett a legmegfelelőbb fordítást is biztosítjuk. Ugyanez a funkció a C#-tagok egyes hozzáféréseinek gyakori fordítására is használható. Például String.Length az SqlServerben fordítja LEN le. A szolgáltatókon kívül a beépülő modulírók további fordításokat is hozzáadhatnak. Ez a bővíthetőség akkor hasznos, ha a beépülő modulok több típust támogatnak primitív típusokként, és metódusokat szeretnének lefordítani rajtuk.
EF. Függvények leképezése
Mivel nem minden adatbázisfüggvény rendelkezik egyenértékű C# függvényekkel, az EF Core-szolgáltatók speciális C# metódusokkal rendelkeznek bizonyos adatbázisfüggvények meghívására. Ezek a metódusok kiterjesztési metódusokként vannak definiálva, hogy a LINQ-lekérdezésekben használhatóak legyenek. Ezek a metódusok szolgáltatóspecifikusak, mivel szorosan kötődnek bizonyos adatbázisfüggvényekhez. Így egy olyan módszer, amely egy szolgáltatónál működik, valószínűleg nem fog működni más szolgáltatónál. Mivel ezen metódusok célja egy adatbázisfüggvény meghívása a lefordított lekérdezésben, az ügyfélen való kiértékelésük kivételt eredményez.
Felhasználó által definiált függvényleképezés
Az EF Core-szolgáltatók által biztosított leképezéseken kívül a felhasználók egyéni leképezéseket is meghatározhatnak. A felhasználó által definiált leképezések a felhasználói igényeknek megfelelően kibővítik a lekérdezésfordítást. Ez a funkció akkor hasznos, ha az adatbázisban vannak felhasználó által definiált függvények, amelyeket a felhasználó a LINQ-lekérdezésből szeretne meghívni.