Översikt över Entity Framework
Entity Framework är en uppsättning tekniker i ADO.NET som stöder utveckling av dataorienterade program. Arkitekter och utvecklare av dataorienterade program har kämpat med behovet av att uppnå två mycket olika mål. De måste modellera entiteter, relationer och logik för de affärsproblem som de löser, och de måste också arbeta med de datamotorer som används för att lagra och hämta data. Data kan omfatta flera lagringssystem, var och en med sina egna protokoll. även program som fungerar med ett enda lagringssystem måste balansera kraven i lagringssystemet mot kraven på att skriva effektiv och underhållsbar programkod.
Entity Framework gör det möjligt för utvecklare att arbeta med data i form av domänspecifika objekt och egenskaper, till exempel kunder och kundadresser, utan att behöva bry sig om de underliggande databastabellerna och kolumnerna där dessa data lagras. Med Entity Framework kan utvecklare arbeta på en högre abstraktionsnivå när de hanterar data och kan skapa och underhålla dataorienterade program med mindre kod än i traditionella program. Eftersom Entity Framework är en komponent i .NET Framework kan Entity Framework-program köras på alla datorer där .NET Framework från och med version 3.5 SP1 är installerat.
Ge liv åt modeller
En långvarig och vanlig designmetod när du skapar ett program eller en tjänst är att dela upp programmet eller tjänsten i tre delar: en domänmodell, en logisk modell och en fysisk modell. Domänmodellen definierar de entiteter och relationer i systemet som modelleras. Den logiska modellen för en relationsdatabas normaliserar entiteter och relationer i tabeller med begränsningar för sekundärnyckel. Den fysiska modellen hanterar funktionerna i en viss datamotor genom att ange lagringsinformation som partitionering och indexering.
Den fysiska modellen förfinas av databasadministratörer för att förbättra prestanda, men programmerare som skriver programkod begränsar sig främst till att arbeta med den logiska modellen genom att skriva SQL-frågor och anropa lagrade procedurer. Domänmodeller används vanligtvis som ett verktyg för att samla in och kommunicera kraven för ett program, ofta som inert-diagram som visas och diskuteras i ett projekts tidiga skeden och sedan överges. Många utvecklingsteam hoppar över att skapa en konceptuell modell och börjar med att ange tabeller, kolumner och nycklar i en relationsdatabas.
Entity Framework ger liv åt modeller genom att göra det möjligt för utvecklare att fråga entiteter och relationer i domänmodellen (kallas en konceptuell modell i Entity Framework) samtidigt som de förlitar sig på Entity Framework för att översätta dessa åtgärder till datakällsspecifika kommandon. Detta frigör program från hårdkodade beroenden på en viss datakälla.
När du arbetar med Code First mappas den konceptuella modellen till lagringsmodellen i kod. Entity Framework kan härleda den konceptuella modellen baserat på de objekttyper och ytterligare konfigurationer som du definierar. Mappningsmetadata genereras under körningen baserat på en kombination av hur du definierade dina domäntyper och ytterligare konfigurationsinformation som du anger i kod. Entity Framework genererar databasen efter behov baserat på metadata. Mer information finns i Skapa en modell.
När du arbetar med Verktyg för entitetsdatamodell uttrycks den konceptuella modellen, lagringsmodellen och mappningarna mellan de två i XML-baserade scheman och definieras i filer som har motsvarande namntillägg:
Konceptuellt schemadefinitionsspråk (CSDL) definierar den konceptuella modellen. CSDL är Entity Frameworks implementering av entitetsdatamodellen. Filnamnstillägget är .csdl.
SSDL (Store Schema Definition Language) definierar lagringsmodellen, som även kallas logisk modell. Filnamnstillägget är .ssdl.
Mappningsspecifikationsspråk (MSL) definierar mappningarna mellan lagrings- och konceptmodellerna. Filnamnstillägget är .msl.
Lagringsmodellen och mappningarna kan ändras efter behov utan att det krävs ändringar i den konceptuella modellen, dataklasserna eller programkoden. Eftersom lagringsmodeller är providerspecifika kan du arbeta med en konsekvent konceptuell modell i olika datakällor.
Entity Framework använder modellen och mappningsfilerna för att skapa, läsa, uppdatera och ta bort åtgärder mot entiteter och relationer i den konceptuella modellen till motsvarande åtgärder i datakällan. Entity Framework stöder till och med mappning av entiteter i den konceptuella modellen till lagrade procedurer i datakällan. Mer information finns i CSDL, SSDL och MSL-specifikationer.
Mappa objekt till data
Objektorienterad programmering utgör en utmaning för att interagera med datalagringssystem. Även om organisationen av klasser ofta speglar organisationen av relationsdatabastabeller är anpassningen inte perfekt. Flera normaliserade tabeller motsvarar ofta en enda klass, och relationer mellan klasser representeras ofta annorlunda än relationer mellan tabeller representeras. För att till exempel representera kunden för en försäljningsorder kan en Order
klass använda en egenskap som innehåller en referens till en instans av en Customer
klass, medan en Order
tabellrad i en databas innehåller en sekundärnyckelkolumn (eller uppsättning kolumner) med ett värde som motsvarar ett primärnyckelvärde i Customer
tabellen. En Customer
klass kan ha en egenskap med namnet Orders
som innehåller en samling instanser av Order
klassen, medan Customer
tabellen i en databas inte har någon jämförbar kolumn. Entity Framework ger utvecklare flexibiliteten att representera relationer på det här sättet, eller att närmare modellera relationer som de representeras i databasen.
Befintliga lösningar har försökt överbrygga det här gapet, som ofta kallas "impedansfelmatchning", genom att endast mappa objektorienterade klasser och egenskaper till relationstabeller och kolumner. I stället för att använda den här traditionella metoden mappar Entity Framework relationstabeller, kolumner och sekundärnyckelbegränsningar i logiska modeller till entiteter och relationer i konceptuella modeller. Detta ger större flexibilitet både när det gäller att definiera objekt och optimera den logiska modellen. Verktygen för entitetsdatamodell genererar utökningsbara dataklasser baserat på den konceptuella modellen. Dessa klasser är partiella klasser som kan utökas med ytterligare medlemmar som utvecklaren lägger till. Som standard härleds de klasser som genereras för en viss konceptuell modell från basklasser som tillhandahåller tjänster för materialisering av entiteter som objekt och för att spåra och spara ändringar. Utvecklare kan använda dessa klasser för att arbeta med entiteter och relationer som objekt som är relaterade till associationer. Utvecklare kan också anpassa de klasser som genereras för en konceptuell modell. Mer information finns i Arbeta med objekt.
Komma åt och ändra entitetsdata
Mer än bara en annan lösning för objektrelationsmappning handlar Entity Framework i grunden om att ge program åtkomst till och ändra data som representeras som entiteter och relationer i den konceptuella modellen. Entity Framework använder information i modellen och mappningsfiler för att översätta objektfrågor mot entitetstyper som representeras i den konceptuella modellen till datakällans specifika frågor. Frågeresultat materialiseras i objekt som Entity Framework hanterar. Entity Framework tillhandahåller följande sätt att köra frågor mot en konceptuell modell och returnera objekt:
LINQ till entiteter. Tillhandahåller stöd för språkintegrerad fråga (LINQ) för frågor mot entitetstyper som definieras i en konceptuell modell. Mer information finns i LINQ till entiteter.
Entitets-SQL. En lagringsoberoende dialekt av SQL som fungerar direkt med entiteter i den konceptuella modellen och som stöder entitetsdatamodellbegrepp. Entitets-SQL används både med objektfrågor och frågor som körs med hjälp av EntityClient-providern. Mer information finns i Översikt över entitets-SQL.
Entity Framework innehåller EntityClient-dataprovidern. Den här providern hanterar anslutningar, översätter entitetsfrågor till datakällans specifika frågor och returnerar en dataläsare som Entity Framework använder för att materialisera entitetsdata till objekt. När objektmaterialisering inte krävs kan EntityClient-providern också användas som en standard-ADO.NET dataprovider genom att göra det möjligt för program att köra entitets-SQL-frågor och använda den returnerade skrivskyddade dataläsaren. Mer information finns i EntityClient-providern för Entity Framework.
Följande diagram illustrerar Entity Framework-arkitekturen för åtkomst till data:
Entitetsdatamodellverktygen kan generera en klass som härletts från System.Data.Objects.ObjectContext
eller System.Data.Entity.DbContext
som representerar entitetscontainern i den konceptuella modellen. Den här objektkontexten tillhandahåller funktioner för att spåra ändringar och hantera identiteter, samtidighet och relationer. Den här klassen exponerar också en SaveChanges
metod som skriver infogningar, uppdateringar och borttagningar till datakällan. Precis som med frågor görs dessa ändringar antingen av kommandon som genereras automatiskt av systemet eller av lagrade procedurer som anges av utvecklaren.
Dataprovidrar
Providern EntityClient
utökar ADO.NET providermodellen genom att komma åt data när det gäller konceptuella entiteter och relationer. Den kör frågor som använder entitets-SQL. Entitets-SQL tillhandahåller det underliggande frågespråket som gör det möjligt EntityClient
att kommunicera med databasen. Mer information finns i EntityClient-providern för Entity Framework.
Entity Framework innehåller en uppdaterad SqlClient-dataprovider som stöder kanoniska kommandoträd. Mer information finns i SqlClient för Entity Framework.
Verktyg för entitetsdatamodell
Tillsammans med Entity Framework-körningen innehåller Visual Studio verktygen för mappning och modellering. Mer information finns i Modellering och mappning.
Läs mer
Mer information om Entity Framework finns i:
Komma igång – Innehåller information om hur du kommer igång snabbt med snabbstarten, som visar hur du skapar ett enkelt Entity Framework-program.
Entity Framework-terminologi – definierar många av de termer som introduceras av entitetsdatamodellen och Entity Framework och som används i Entity Framework-dokumentationen.
Entity Framework-resurser – Innehåller länkar till konceptuella ämnen och länkar till externa ämnen och resurser för att skapa Entity Framework-program.