Delen via


Overzicht van Entity Framework

Entity Framework is een set technologieën in ADO.NET die ondersteuning bieden voor de ontwikkeling van gegevensgeoriënteerde softwaretoepassingen. Architecten en ontwikkelaars van gegevensgeoriënteerde toepassingen hebben moeite met de noodzaak om twee zeer verschillende doelstellingen te bereiken. Ze moeten de entiteiten, relaties en logica van de zakelijke problemen die ze oplossen modelleren en ze moeten ook werken met de gegevensengines die worden gebruikt om de gegevens op te slaan en op te halen. De gegevens kunnen meerdere opslagsystemen omvatten, elk met eigen protocollen; zelfs toepassingen die met één opslagsysteem werken, moeten de vereisten van het opslagsysteem in balans houden met de vereisten voor het schrijven van efficiënte en onderhoudbare toepassingscode.

Met Entity Framework kunnen ontwikkelaars werken met gegevens in de vorm van domeinspecifieke objecten en eigenschappen, zoals klanten en klantadressen, zonder dat ze zich zorgen hoeven te maken over de onderliggende databasetabellen en -kolommen waarin deze gegevens worden opgeslagen. Met Entity Framework kunnen ontwikkelaars op een hoger abstractieniveau werken wanneer ze omgaan met gegevens en kunnen ze gegevensgeoriënteerde toepassingen maken en onderhouden met minder code dan in traditionele toepassingen. Omdat Entity Framework een onderdeel van .NET Framework is, kunnen Entity Framework-toepassingen worden uitgevoerd op elke computer waarop het .NET Framework vanaf versie 3.5 SP1 is geïnstalleerd.

Geef modellen het leven

Een langdurige en algemene ontwerpbenadering bij het bouwen van een toepassing of service is de verdeling van de toepassing of service in drie delen: een domeinmodel, een logisch model en een fysiek model. Het domeinmodel definieert de entiteiten en relaties in het systeem dat wordt gemodelleerd. Het logische model voor een relationele database normaliseert de entiteiten en relaties in tabellen met beperkingen voor refererende sleutels. Het fysieke model heeft betrekking op de mogelijkheden van een bepaalde gegevensengine door opslagdetails op te geven, zoals partitioneren en indexeren.

Het fysieke model wordt verfijnd door databasebeheerders om de prestaties te verbeteren, maar programmeurs die toepassingscode schrijven, beperken zich voornamelijk tot het werken met het logische model door SQL-query's te schrijven en opgeslagen procedures aan te roepen. Domeinmodellen worden over het algemeen gebruikt als hulpprogramma voor het vastleggen en communiceren van de vereisten van een toepassing, vaak als inerte diagrammen die in de vroege fasen van een project worden bekeken en besproken en vervolgens worden afgelaten. Veel ontwikkelteams slaan het maken van een conceptueel model over en beginnen met het opgeven van tabellen, kolommen en sleutels in een relationele database.

Het Entity Framework biedt een leven voor modellen door ontwikkelaars in staat te stellen om query's uit te voeren op entiteiten en relaties in het domeinmodel (een conceptueel model in entity framework genoemd) terwijl ze afhankelijk zijn van het Entity Framework om deze bewerkingen te vertalen naar specifieke opdrachten voor gegevensbronnen. Hiermee worden toepassingen van in code vastgelegde afhankelijkheden van een bepaalde gegevensbron vrijgemaakt.

Wanneer u met Code First werkt, wordt het conceptuele model toegewezen aan het opslagmodel in code. Het Entity Framework kan het conceptuele model afleiden op basis van de objecttypen en aanvullende configuraties die u definieert. De toewijzingsmetagegevens worden gegenereerd tijdens de runtime op basis van een combinatie van hoe u uw domeintypen hebt gedefinieerd en aanvullende configuratiegegevens die u in code opgeeft. Entity Framework genereert de database indien nodig op basis van de metagegevens. Zie Een model maken voor meer informatie.

Wanneer u met de Hulpmiddelen voor entiteitsgegevensmodellen werkt, worden het conceptuele model, het opslagmodel en de toewijzingen tussen de twee uitgedrukt in XML-schema's en gedefinieerd in bestanden met bijbehorende naamextensies:

  • De conceptuele schemadefinitietaal (CSDL) definieert het conceptuele model. CSDL is de implementatie van het Entity Framework van het Entity Data Model. De bestandsextensie is .csdl.

  • Sla schemadefinitietaal (SSDL) definieert het opslagmodel, dat ook wel het logische model wordt genoemd. De bestandsextensie is .ssdl.

  • De toewijzingsspecificatietaal (MSL) definieert de toewijzingen tussen de opslag- en conceptuele modellen. De bestandsextensie is .msl.

Het opslagmodel en de toewijzingen kunnen indien nodig worden gewijzigd zonder dat er wijzigingen in het conceptuele model, gegevensklassen of toepassingscode nodig zijn. Omdat opslagmodellen providerspecifiek zijn, kunt u werken met een consistent conceptueel model in verschillende gegevensbronnen.

Het Entity Framework maakt gebruik van deze model- en toewijzingsbestanden voor het maken, lezen, bijwerken en verwijderen van bewerkingen op entiteiten en relaties in het conceptuele model tot gelijkwaardige bewerkingen in de gegevensbron. Entity Framework ondersteunt zelfs het toewijzen van entiteiten in het conceptuele model aan opgeslagen procedures in de gegevensbron. Zie CSDL-, SSDL- en MSL-specificaties voor meer informatie.

Objecten toewijzen aan gegevens

Objectgeoriënteerd programmeren vormt een uitdaging voor interactie met gegevensopslagsystemen. Hoewel de organisatie van klassen vaak de organisatie van relationele databasetabellen weerspiegelt, is de pasvorm niet perfect. Meerdere genormaliseerde tabellen komen vaak overeen met één klasse en relaties tussen klassen worden vaak anders weergegeven dan relaties tussen tabellen. Als u bijvoorbeeld de klant voor een verkooporder wilt vertegenwoordigen, kan een Order klasse een eigenschap gebruiken die een verwijzing bevat naar een exemplaar van een Customer klasse, terwijl een Order tabelrij in een database een kolom met refererende sleutels (of een set kolommen) bevat met een waarde die overeenkomt met een primaire-sleutelwaarde in de Customer tabel. Een Customer klasse heeft mogelijk een eigenschap met de naam Orders die een verzameling exemplaren van de Order klasse bevat, terwijl de Customer tabel in een database geen vergelijkbare kolom heeft. Entity Framework biedt ontwikkelaars de flexibiliteit om relaties op deze manier weer te geven of om relaties nauwkeuriger te modelleren terwijl ze worden weergegeven in de database.

Bestaande oplossingen hebben geprobeerd deze kloof te overbruggen. Dit wordt vaak een 'impedantie komt niet overeen', door alleen objectgeoriënteerde klassen en eigenschappen toe te kennen aan relationele tabellen en kolommen. In plaats van deze traditionele benadering te gebruiken, wijst Entity Framework relationele tabellen, kolommen en refererende sleutelbeperkingen in logische modellen toe aan entiteiten en relaties in conceptuele modellen. Dit maakt meer flexibiliteit mogelijk bij het definiëren van objecten en het optimaliseren van het logische model. Met de hulpprogramma's voor entiteitsgegevensmodellen worden uitbreidbare gegevensklassen gegenereerd op basis van het conceptuele model. Deze klassen zijn gedeeltelijke klassen die kunnen worden uitgebreid met extra leden die de ontwikkelaar toevoegt. De klassen die worden gegenereerd voor een bepaald conceptueel model, zijn standaard afgeleid van basisklassen die services bieden voor het materialiseren van entiteiten als objecten en voor het bijhouden en opslaan van wijzigingen. Ontwikkelaars kunnen deze klassen gebruiken om te werken met de entiteiten en relaties als objecten die zijn gerelateerd door koppelingen. Ontwikkelaars kunnen ook de klassen aanpassen die worden gegenereerd voor een conceptueel model. Zie Werken met objecten voor meer informatie.

Entiteitsgegevens openen en wijzigen

Meer dan alleen een oplossing voor object-relationele toewijzing, is het Entity Framework fundamenteel bedoeld om toepassingen toegang te geven tot en gegevens te wijzigen die worden weergegeven als entiteiten en relaties in het conceptuele model. Entity Framework gebruikt informatie in het model en toewijzingsbestanden om objectquery's te vertalen op entiteitstypen die in het conceptuele model worden weergegeven in query's die specifiek zijn voor gegevensbronnen. Queryresultaten worden gerealiseerd in objecten die door Entity Framework worden beheerd. Het Entity Framework biedt de volgende manieren om een query uit te voeren op een conceptueel model en objecten te retourneren:

  • LINQ naar entiteiten. Biedt LINQ-ondersteuning (Language-Integrated Query) voor het uitvoeren van query's op entiteitstypen die zijn gedefinieerd in een conceptueel model. Zie LINQ naar entiteiten voor meer informatie.

  • Entiteit SQL. Een opslagonafhankelijk dialect van SQL dat rechtstreeks werkt met entiteiten in het conceptuele model en die ondersteuning biedt voor concepten van Entity Data Model. Entiteit SQL wordt zowel gebruikt met objectquery's als query's die worden uitgevoerd met behulp van de EntityClient-provider. Zie Het overzicht van Entity SQL voor meer informatie.

Het Entity Framework bevat de EntityClient-gegevensprovider. Deze provider beheert verbindingen, vertaalt entiteitsquery's naar gegevensbronspecifieke query's en retourneert een gegevenslezer die het Entity Framework gebruikt om entiteitsgegevens in objecten te materialiseren. Wanneer objectver materialisatie niet vereist is, kan de EntityClient-provider ook worden gebruikt als een standaardgegevensprovider ADO.NET door toepassingen in staat te stellen Entiteit SQL-query's uit te voeren en de geretourneerde alleen-lezengegevenslezer te gebruiken. Zie EntityClient-provider voor het Entity Framework voor meer informatie.

In het volgende diagram ziet u de Entity Framework-architectuur voor toegang tot gegevens:

Entity Framework Architectural Diagram

De Hulpprogramma's voor entiteitsgegevensmodellen kunnen een klasse genereren die is afgeleid van System.Data.Objects.ObjectContext of System.Data.Entity.DbContext die de entiteitscontainer in het conceptuele model vertegenwoordigt. Deze objectcontext biedt de faciliteiten voor het bijhouden van wijzigingen en het beheren van identiteiten, gelijktijdigheid en relaties. In deze klasse wordt ook een SaveChanges methode weergegeven waarmee invoegingen, updates en verwijderingen naar de gegevensbron worden geschreven. Net als bij query's worden deze wijzigingen aangebracht door opdrachten die automatisch worden gegenereerd door het systeem of door opgeslagen procedures die zijn opgegeven door de ontwikkelaar.

Gegevensproviders

De EntityClient provider breidt het ADO.NET providermodel uit door toegang te krijgen tot gegevens in termen van conceptuele entiteiten en relaties. Hiermee worden query's uitgevoerd die gebruikmaken van Entity SQL. Entity SQL biedt de onderliggende querytaal waarmee u met de database kunt EntityClient communiceren. Zie EntityClient-provider voor het Entity Framework voor meer informatie.

Het Entity Framework bevat een bijgewerkte SqlClient-gegevensprovider die canonieke opdrachtstructuren ondersteunt. Zie SqlClient voor het Entity Framework voor meer informatie.

Hulpprogramma's voor entiteitsgegevensmodellen

Samen met de Entity Framework-runtime bevat Visual Studio de hulpprogramma's voor toewijzing en modellering. Zie Modellering en toewijzing voor meer informatie.

Meer informatie

Zie voor meer informatie over Entity Framework:

Aan de slag- Biedt informatie over hoe u snel aan de slag kunt met behulp van de quickstart, waarin wordt uitgelegd hoe u een eenvoudige Entity Framework-toepassing maakt.

Entity Framework-terminologie : definieert veel van de termen die worden geïntroduceerd door het Entiteitsgegevensmodel en het Entity Framework en die worden gebruikt in de Documentatie van Entity Framework.

Entity Framework-resources : bevat koppelingen naar conceptuele onderwerpen en koppelingen naar externe onderwerpen en resources voor het bouwen van Entity Framework-toepassingen.

Zie ook