Az ADO.NET Entitás-keretrendszer (EF, Entity Framework) egy objektum-relációs leképező keretrendszer a .NET keretrendszerhez.

Története

Az entitás keretrendszer első verziója (az EFv1) a .NET keretrendszer 3.5 verzió 1. szervizcsomagjának és a Visual Studio 2008 2008. augusztus 11-én kiadott 1. szervizcsomagjának a része volt. Ez a verzió rengeteg kritikát kapott, egészen odáig, hogy mintegy ezer fejlesztő aláírásával egy bizalmatlansági nyilatkozat készült.ADO .NET Entity Framework Vote of No Confidence

Az entitás keretrendszer második kiadása, az Entitás Keretrendszer 4.0 (EFv4), a .NET 4.0 részeként jelent meg 2010. április 12-én, és megkísérelte az 1.0-ért kritikák által kifogásolt hiányosságok jó részének javítását.

A harmadik verziót, 4.1-es verziószámmal, 2011. április 12-én adták ki egy Code First támogatással.

A 4.1 frissítésként jelent meg az Entitás Keretrendszer 4.1 Update 1, amely 2011. július 25-én látott napvilágot. Új típustámogatások és hibajavítások kaptak benne helyet.

A legújabb verziót, a 4.3.1-est, 2012. február 29-én adták ki. Egy pár frissítés és migrációs támogatás kapott benne helyet.

A legújabb kiadás előtti próbaverzió, az 5.0.0-beta2, a , címen érhető el; a .NET keretrendszer 4.5 változatát célozza meg.

Architektúra Az ADO.NET Entitás Keretrendszer architektúrája az alábbiakból áll össze növekvő absztrakciós sorrendben: Adatforrás-specifikus kiszolgálók, amely absztrakciós ADO.NET felületeket használnak fel az adatbázis kapcsolathoz, amikor sémák szerint programozunk. Leképzés kiszolgáló, egy adatbázis függő kiszolgáló, amely lefordítja az Entitás SQL utasításfát lekérdezésekké az adatbázis natív SQL nyelvének megfelelően. Ez magába foglalja a tároló függő hidat, azt a komponenst, amely felelős a generikus utasításfák tárolófüggő utasításfákra való fordításáért. EDM elemző és nézet leképezés, amely felhasználja az adatmodell SDL specifikációját, és az alapján, ahogyan az leképez a relációs modellre, lehetővé teszi az elméleti modellben történő programozást. A relációs sémából létrehoz nézeteket, amely megfelel az elméleti modellnek. Összegyűjti az információkat különböző táblákból entitásokat kialakítva belőlük, és szétosztja, illetve frissíti az entitás adatait a különböző táblákban, függetlenül attól, mely táblák tartoznak az entitáshoz. Lekérdezés és frissítés csővezeték, azaz pipeline, folyamat-lekérdezések, filterek és frissítési kérelmek küldése, hogy átalakítsa őket kanonikus utasításfákká, amelyeket tároló specifikus lekérdezésekké alakít a leképzés szolgáltató segítségével. Metaadat szolgáltatók, ez kezeli az összes entitáshoz rendelt metaadatot, kapcsolatokat és leképezéseket. Tranzakciók, elérhetővé teszik a tár tranzakciós szolgáltatásait. Amennyiben a felhasznált tároló nem támogatja a tranzakciókat, a szükségeknek megfelelően ez a réteg valósítja meg ezeket. Koncepciós réteg API, egy olyan környezet, amely lehetővé teszi a koncepciós séma programozását. Követi az ADO.NET mintákat Connection objektumok használatával, hogy leképezés szolgáltatókra hivatkozzon, használja a Command objektumokat hogy leképezések küldjön el, és EntityResultSets vagy EntitySets-ként adja vissza a végeredményt. Kapcsolat nélküli/leválasztott komponensek, helyileg tárolják az adathalmazt és az entitás halmazokat, hogy kihasználják az ADO.NET Entitás Keretrendszer lehetőségeit egy alkalmanként csatlakozó környezetben. Beágyazott adatbázis: az ADO.NET Entitás Keretrendszer magában foglal egy könnyű súlyú adatbázist a relációs adatok felhasználó oldali gyorsítótárazására. Tervező eszközök, a Leképezés Tervezőhöz hasonlóan ezek szintén beépítettek az ADO.NET Entitás Keretrendszerbe. Egyszerűsíti a leképezéseken végzett feladatokat egy koncepciós sémából relációs sémába és meghatározza, hogy az entitás típus adott tulajdonságai mely táblához tartoznak az adatbázisban. Programozási réteg, rajta keresztül férünk hozzá az EDM-hez mint programozási konstrukcióhoz, amely felhasználható a programozási nyelveken. Objektum szolgáltatások, automatikusan generálják a kódot CLR osztályokhoz, amelyek az entitásnak megfelelő tulajdonságokkal rendelkeznek, ezzel lehetővé téve az entitások .NET objektumokként való példányosítását. Web szolgáltatások, az entitások segítségükkel web szolgáltatásként elérhetőek. Magas szintű szolgáltatások, mint például a jelentés szolgáltató, amely entitásokkal dolgozik relációs adatok helyett.

Entitás Adat Modell Az Entitás Adat Modell (EDM) fogalmazza meg a koncepcionális modellt (CSDL) az entitás kapcsolati modell segítségével, amely az entitásokkal foglalkozik legfőképp és hozzárendelésekkel, amelyekben érintettek. Az EDM séma a Séma Definíciós Nyelven van megadva (SDL), amely egy XML megoldás. Ehhez hozzá adódik, a leképezése (MSL) az elemeknek a koncepciós sémára (CSDL) és a tároló séma (SSDL) amelyeknek szintén muszáj elkészíteni. A leképezés meghatározása szintén XML-el történik.

Visual Studio szintén nyújt egy Entitás Tervezőt, az EDM vizuális létrehozásához és a leképezés meghatározásához. Az eszköz kimenete egy XML fájl (*.edmx) határozza meg a sémát és a leképezést. Az Edmx fájl tartalmazza az EF metaadat meghatározásokat (CSDL/MSL/SSDL tartalmak). Ez a három fájl (csdl, msl, ssdl) szintén létrehozható és szerkeszthető kézzel.

Leképezés Az Entitás Adat Modell Varázsló a Visual Studioban kezdetben generál egy 1:1 (egy az egyhez) leképezést a koncepciós és az adatbázis séma közt az esetek nagy részében. A relációs sémában, az elemek táblákká kerülnek összeállításra, amelyekben az elsődleges és az idegen kulcsok kapcsolják az adatokat össze. Az Entitás Típusok definiálják az adatok koncepcionális sémáit.

Az entitás típus különböző típusú mezők összesítése – minden mező a tábla megfelelő oszlopába képződik le – és tartalmazhat információkat több fizikai táblából. Az entitás típusok összekapcsolhatóak, a fizikai sémában lévő kapcsolataiktól függetlenül. A kapcsolt entitások szintén hasonlósan alakíthatóak ki – a mezőkön keresztül amely meghatározza a kapcsolatot közreműködnek a hozzáférésben, amely ahelyett hogy visszaadna egy értéket egy adatbázis oszlopból, bejárja a kapcsolatot és visszaad egy entitást (vagy entitás kollekciót) amely hozzá kapcsolt.

Az entitás típus meghatározza az entitások osztályát, hogy az entitás objektum mely típusból került példányosításra. Az entitások objektumokként állnak elő amelyek egy alkalmazás probléma megoldásának részét képezik és egy kulccsal indexeltek. Például, egy fizikai séma átalakításával, amint azt fentebb részleteztük, két entitás típushoz jutunk: CustomerEntity, amely tartalmazza a nevet a Customers táblából, és a vásárló címét a Contacts táblából. OrderEntity, amely magába foglalja egy vásárló egy rendelését, az Orders táblából nyerhető. A logikai sémát és annak leképezése a fizikai sémára Entitás Adat Modell (EDM), határozza meg egy XML fájlban. ADO.NET Entitás Keretrendszer használja az EDMet hogy létrehozza a leképezést és biztosítsa az alkalmazásnak hogy dolgozhasson az entitásokkal, míg belül absztrahálja az ADO.NET konstrukció szerinti DataSet és RecordSet adathalmazokat. ADO.NET Entitás Keretrendszer kezeli az SQL JOIN műveleteket hogy kinyerje a szükséges entitás információkat a különböző táblákból, vagy amikor egy kapcsolatot bejár. amikor egy entitás frissítésre kerül, visszaköveti hogy mely táblákból származnak az adatok és végrehajt SQL UPDATE utasításokat hogy frissítsen a táblákban amelyekben adatok módosultak. ADO.NET Entitás Keretrendszer eSQL-t használ, az SQL egy leszármaztatott verzióját, hogy megoldja a lekérdezéseket, halmaz elméleti műveleteket, és frissítéseket az entitásokon és a kapcsolataikon. A lekérdezések eSQL-ben, ha szükséges, az adatbázis natív SQL nyelvére kerülnek lefordításra.

Az entitás típusok és entitás halmazok az EDM sémából, bármiként kiajánlhatóak. ADO.NET Entitás Keretrendszer magába foglalja az Objektum Szolgáltatást amely az entitásokat objektumokként szolgáltatja az elemeikkel és a kapcsolataikat mint tulajdonságok. Ezek az entitás objektumok csak front-end-ek az EDM entitás típusokhoz, amely lehetővé teszi az objektumorientált nyelvek számára a hozzáférést. Hasonlóan, más front-end-ek is létrehozhatóak, amely az entitásokat webszolgáltatásként hozza létre (értsd, WCF adat szolgáltatások) vagy XML amelyek az entitások szerializálására használt a perzisztencia biztosítására vagy az átírási átvitelekhez.

Entitások Az Entitás Típus példányai; egy tetszőleges objektumot reprezentálhatnak (mint a customer, orders) amelyek információ kimentésével és tárolásával foglalkoznak. Egy entitás identitása az entitás típus által van meghatározva annak egy példánya; ilyen módon érzékeltetve az entitás típus egy osztályt határoz meg egy entitás ehhez tartozik és definiálja azt is hogy milyen tulajdonságai mezői vannak egy entitásnak. A tulajdonság mezők bizonyos értelemben leírják az entitást azáltal hogy nevet és típust rendelnek az entitáshoz. Az entitás típus tulajdonságai az ADO.NET Entitás Keretrendszerben teljesen típusosak, és teljesen kompatibilisek DBMS rendszer által használt típus rendszerrel, úgy mint a Common Type System a .NET Keretrendszerben. Egy tulajdonság mező lehet egyszerű típus vagy összetett, és lehet több értékű is. Minden entitás típushoz tartozik névtér, és van egy entitás kulcs tulajdonság mezője amely egyedi azonosító minden entitás típus példányhoz. A különböző tulajdonság mezők a következő képen alakulnak: Egyszerű Típus, megfelel egy olyan egyszerű adat típusnak minta az Integer, Karakterek és Lebegő Pontos számok. Összetett Típus, különféle egyszerű típusú tulajdonság mezőket egyesít, vagy Összetett Típusokat. Nem úgy mint az Entitás Típus, habár, az Összetett Típusoknak nem lehet Entitás Kulcsuk. Az Entitás Keretrendszerben v1 az Összetett Típusok nem származtathatóak.

Minden entitást egy entitás tároló kezel, ami egy elő-projekt tárolója az entitásokhoz. Minden projekt tartalmaz egy vagy több entitás-konténert, amely hivatkozhat az entitásokra névterektől és entitás-típustól függetlenül. Az entitás típus több példánya tárolható kollekciókban/gyűjteményekben amelyeket EntitySet-ként neveznek . Egy entitásnak lehet több EntitySet-je.

EDM primitív típusok (egyszerű típusok): EDM típusCLR típus leképzéseEdm.BinaryByte[]Edm.BooleanBooleanEdm.ByteByteEdm.DateTimeDateTimeEdm.DateTimeOffsetDateTimeOffsetEdm.DecimalDecimalEdm.DoubleDoubleEdm.GuidGuidEdm.Int16Int16Edm.Int32Int32Edm.Int64Int64Edm.SByteSByteEdm.SingleSingleEdm.StringStringEdm.TimeTimeSpan

Kapcsolatok Bármely két típus összekapcsolható, egy Hozzárendelés segítségével kapcsolatba hozható egy Tartalmazás relációval. Például, egy szállítmány számlázott egy vásárlónak egy kapcsolaton keresztül ahol a egy megrendelés tartalmazza a megrendelés adatait egy tartalmazás relációval. Egy tartalmazás reláció szintén használható az elemek örököltetésének modellezésére. A kapcsolat két entitás típus közt egy Kapcsolat Típuson keresztül van meghatározva, ennek példányai, amelyeket Kapcsolatnak neveznek, tartozik az entitás példányokhoz. A jövőbeli kiadásokban, más kapcsolati típusok mint amilyen a Kompozíció, vagy Azonosítás, valószínűleg bevezetésre kerülnek majd. A kapcsolat típusok a fokuk (aritás) által karakterizáltak vagy a hivatkozott entitás típusok számával és a multiplicitásukkal. Habár, az ADO.NET Entitás Keretrendszer jelenlegi kiadásában, a kapcsolatok limitáltak egy kettős (kettes fokú) kétirányú kapcsolatként. A multiplicitás meghatározza hogy hány entitás példány kapcsolható egymáshoz. A multiplicitást alapul véve, a kapcsolatok lehetnek egy-egy, egy-több, több-több kapcsolatok. A kapcsolatoknak az entitások közt van neve; ezt Role-nak hívják. Ez meghatározza a kapcsolat okát.