Az Entity Framework áttekintése
Az Entity Framework olyan technológiák készlete ADO.NET, amelyek támogatják az adatorientált szoftveralkalmazások fejlesztését. Az adatorientált alkalmazások tervezőinek és fejlesztőinek két nagyon különböző célkitűzést kellett elérniük. Modellezniük kell az általuk megoldott üzleti problémák entitásait, kapcsolatait és logikáját, valamint az adatok tárolásához és lekéréséhez használt adatmotorokkal is együtt kell működniük. Az adatok több tárolórendszerre is kiterjedhetnek, mindegyiknek saját protokollja van; még az egyetlen tárolórendszerrel dolgozó alkalmazásoknak is ki kell egyensúlyozniuk a tárolórendszer követelményeit a hatékony és karbantartható alkalmazáskód írásának követelményeivel.
Az Entity Framework lehetővé teszi a fejlesztők számára, hogy tartományspecifikus objektumok és tulajdonságok, például ügyfelek és ügyfélcímek formájában dolgozzanak az adatokkal anélkül, hogy foglalkozniuk kellene a mögöttes adatbázistáblákkal és oszlopokkal, ahol ezeket az adatokat tárolják. Az Entity Framework használatával a fejlesztők magasabb absztrakciós szinten dolgozhatnak az adatok kezelésekor, és kevesebb kóddal hozhatnak létre és tarthatnak fenn adatorientált alkalmazásokat, mint a hagyományos alkalmazásokban. Mivel az Entity Framework a .NET-keretrendszer összetevője, az Entity Framework-alkalmazások bármely olyan számítógépen futtathatók, amelyen a .NET-keretrendszer a 3.5 SP1-es verziótól kezdve telepítve van.
Élet a modelleknek
Az alkalmazások vagy szolgáltatások létrehozásakor régóta használt és gyakori tervezési megközelítés az alkalmazás vagy szolgáltatás három részre osztása: tartománymodell, logikai modell és fizikai modell. A tartománymodell határozza meg a modellezett rendszerben lévő entitásokat és kapcsolatokat. A relációs adatbázis logikai modellje normalizálja az entitásokat és a kapcsolatokat idegenkulcs-korlátozásokkal rendelkező táblákba. A fizikai modell egy adott adatmotor képességeit kezeli a tárolási részletek, például a particionálás és az indexelés megadásával.
A fizikai modellt az adatbázis-rendszergazdák finomítják a teljesítmény javítása érdekében, de az alkalmazáskódot író programozók elsősorban sql-lekérdezések írásával és tárolt eljárások meghívásával korlátozzák magukat a logikai modell használatához. A tartománymodelleket általában egy alkalmazás követelményeinek rögzítésére és közlésére használják, gyakran inert diagramokként, amelyeket a projekt korai szakaszaiban tekintenek meg és tárgyalnak, majd elhagynak. Számos fejlesztőcsapat kihagyja a fogalmi modell létrehozását, és először táblákat, oszlopokat és kulcsokat ad meg egy relációs adatbázisban.
Az Entity Framework életet ad a modelleknek azáltal, hogy lehetővé teszi a fejlesztők számára a tartománymodellben lévő entitások és kapcsolatok lekérdezését (az Entity Framework elméleti modelljét), miközben az Entity Frameworkre támaszkodva lefordítják ezeket a műveleteket adatforrás-specifikus parancsokra. Ez felszabadítja az alkalmazásokat egy adott adatforrásra vonatkozó, szigorúan kódolt függőségektől.
A Code First használatakor a rendszer leképezi a koncepciómodellt a kódban lévő tárolási modellre. Az Entity Framework az ön által definiált objektumtípusok és további konfigurációk alapján következtethet a koncepcionális modellre. A leképezési metaadatok futás közben jönnek létre a tartománytípusok és a kódban megadott további konfigurációs információk kombinációja alapján. Az Entity Framework szükség szerint létrehozza az adatbázist a metaadatok alapján. További információ: Modell létrehozása.
Az Entity Data Model Tools használatakor az elméleti modell, a tárolási modell és a kettő közötti leképezések XML-alapú sémákban vannak kifejezve, és a megfelelő névkiterjesztésekkel rendelkező fájlokban vannak definiálva:
A fogalmi sémadefiníciós nyelv (CSDL) határozza meg a fogalmi modellt. A CSDL az entitás-adatmodell entity framework-implementációja. A fájlkiterjesztés .csdl.
Az Áruház sémadefiníciós nyelve (SSDL) határozza meg a tárolási modellt, amelyet logikai modellnek is neveznek. A fájlkiterjesztés .ssdl.
A leképezési specifikáció nyelve (MSL) határozza meg a tárolási és a fogalmi modellek közötti leképezéseket. A fájlkiterjesztés .msl.
A tárolási modell és a leképezések szükség szerint változhatnak anélkül, hogy módosítani kellene az elméleti modellt, az adatosztályokat vagy az alkalmazáskódot. Mivel a tárolási modellek szolgáltatóspecifikusak, konzisztens elméleti modellel dolgozhat különböző adatforrások között.
Az Entity Framework ezeket a modell- és leképezési fájlokat használja a fogalmi modell entitásai és kapcsolatain végzett műveletek létrehozására, olvasására, frissítésére és törlésére az adatforrás egyenértékű műveleteivel. Az Entity Framework még a fogalmi modellben lévő entitásokat is támogatja az adatforrásban tárolt eljárásokhoz. További információ: CSDL, SSDL és MSL-specifikációk.
Objektumok leképezése adatokhoz
Az objektumorientált programozás kihívást jelent az adattároló rendszerekkel való interakcióhoz. Bár az osztályok szervezése gyakran tükrözi a relációs adatbázistáblák rendszerét, az illesztés nem tökéletes. Több normalizált tábla gyakran egyetlen osztálynak felel meg, és az osztályok közötti kapcsolatok gyakran másként jelennek meg, mint a táblák közötti kapcsolatok. Ha például egy értékesítési rendeléshez az ügyfelet szeretné képviselni, az osztály olyan tulajdonságot használhat, Order
amely egy osztálypéldányra mutató hivatkozást tartalmaz, míg az Order
adatbázis táblázatsorai egy idegenkulcs-oszlopot (vagy oszlopkészletet) tartalmaznak, amely a tábla elsődleges kulcsértékének Customer
Customer
felel meg. Egy Customer
osztálynak lehet egy olyan tulajdonsága, Orders
amely az Order
osztály példányainak gyűjteményét tartalmazza, míg az Customer
adatbázis táblája nem rendelkezik összehasonlítható oszlopokkal. Az Entity Framework rugalmasságot biztosít a fejlesztők számára a kapcsolatok ily módon történő ábrázolásához, vagy az adatbázisban ábrázolt kapcsolatok szorosabb modellezéséhez.
A meglévő megoldások megpróbálták áthidalni ezt a rést, amelyet gyakran "impedanciaeltérésnek" neveznek, csak az objektumorientált osztályok és tulajdonságok relációs táblákhoz és oszlopokhoz való leképezésével. A hagyományos megközelítés helyett az Entity Framework a logikai modellek relációs tábláit, oszlopait és idegenkulcs-korlátozásait a fogalmi modellek entitásaihoz és kapcsolataihoz rendeli le. Ez nagyobb rugalmasságot tesz lehetővé mind az objektumok definiálása, mind a logikai modell optimalizálása terén. Az Entity Data Model eszközei a fogalmi modell alapján bővíthető adatosztályokat hoznak létre. Ezek az osztályok részleges osztályok, amelyek további tagokkal bővíthetők, amelyeket a fejlesztő hozzáad. Alapértelmezés szerint az adott fogalmi modellhez létrehozott osztályok olyan alaposztályokból származnak, amelyek szolgáltatásokat nyújtanak az entitások objektumként való materializálásához, valamint a változások nyomon követéséhez és mentéséhez. A fejlesztők ezeket az osztályokat használhatják az entitások és kapcsolatok társítások által kapcsolódó objektumokként való használatára. A fejlesztők testre is szabhatják a koncepcionális modellhez létrehozott osztályokat. További információ: Az objektumok használata.
Entitásadatok elérése és módosítása
Az Entity Framework több mint egy másik objektum-relációs leképezési megoldás, amely alapvetően arról szól, hogy az alkalmazások hozzáférhetnek és módosíthatják azokat az adatokat, amelyek entitásként és kapcsolatként jelenik meg a fogalmi modellben. Az Entity Framework a modell információi és a leképezési fájlok segítségével fordítja le az objektumlekérdezéseket a fogalmi modellben képviselt entitástípusokra adatforrás-specifikus lekérdezésekké. A lekérdezési eredmények olyan objektumokba kerülnek, amelyeket az Entity Framework kezel. Az Entity Framework a következő módszereket kínálja egy elméleti modell lekérdezéséhez és objektumok visszaadásához:
LINQ–Entitások. Nyelvileg integrált lekérdezési (LINQ) támogatást nyújt a fogalmi modellben definiált entitástípusok lekérdezéséhez. További információ: LINQ to Entities.
Entitás SQL. Az SQL tárolófüggetlen dialektusa, amely közvetlenül a fogalmi modell entitásaival működik, és amely támogatja az entity data model fogalmait. Az Entity SQL az EntityClient-szolgáltatóval végrehajtott objektum-lekérdezésekhez és lekérdezésekhez egyaránt használható. További információkért tekintse meg az Entity SQL áttekintését.
Az Entity Framework tartalmazza az EntityClient adatszolgáltatót. Ez a szolgáltató kezeli a kapcsolatokat, átalakítja az entitás-lekérdezéseket adatforrás-specifikus lekérdezésekké, és visszaad egy adatolvasót, amelyet az Entity Framework az entitásadatok objektumokká való alakítására használ. Ha nincs szükség objektum-materializálásra, az EntityClient-szolgáltató szabványos ADO.NET adatszolgáltatóként is használható, ha lehetővé teszi az alkalmazások számára az Entity SQL-lekérdezések végrehajtását és a visszaadott írásvédett adatolvasó használatát. További információ: EntityClient Provider for the Entity Framework.
Az alábbi ábra az entity framework architektúrát mutatja be az adatok eléréséhez:
Az entitásadatmodell-eszközök létrehozhatnak egy osztályt, amely a fogalmi modell entitástárolójából System.Data.Objects.ObjectContext
származik, vagy System.Data.Entity.DbContext
amely az entitástárolót jelöli. Ez az objektumkörnyezet lehetővé teszi a változások nyomon követését és az identitások, az egyidejűség és a kapcsolatok kezelését. Ez az osztály egy olyan metódust SaveChanges
is elérhetővé tesz, amely beszúrásokat, frissítéseket és törléseket ír az adatforrásba. A lekérdezésekhez hasonlóan ezeket a módosításokat vagy a rendszer által automatikusan generált parancsok vagy a fejlesztő által megadott tárolt eljárások hajtják végre.
Adatszolgáltatók
A EntityClient
szolgáltató kiterjeszti a ADO.NET szolgáltatói modellt az adatok fogalmi entitások és kapcsolatok szempontjából való elérésével. Entitás SQL-t használó lekérdezéseket hajt végre. Az Entity SQL biztosítja a mögöttes lekérdezési nyelvet, amely lehetővé teszi EntityClient
az adatbázissal való kommunikációt. További információ: EntityClient Provider for the Entity Framework.
Az Entity Framework tartalmaz egy frissített SqlClient-adatszolgáltatót, amely támogatja a kanonikus parancsfákat. További információ: SqlClient for the Entity Framework.
Entitásadat-modell eszközei
Az Entity Framework futtatókörnyezetével együtt a Visual Studio tartalmazza a leképezési és modellezési eszközöket. További információ: Modellezés és leképezés.
További információ
Az Entity Frameworkről további információt a következő témakörben talál:
Első lépések – A rövid útmutatóból megtudhatja, hogyan hozhat létre egyszerű Entity Framework-alkalmazást.
Entity Framework Terminológia – Az entity data model és az Entity Framework által bevezetett és az Entity Framework dokumentációjában használt kifejezések nagy részét definiálja.
Entitás-keretrendszer erőforrásai – Koncepcionális témakörökre mutató hivatkozásokat, valamint külső témakörökre és erőforrásokra mutató hivatkozásokat biztosít az Entity Framework-alkalmazások létrehozásához.