Entity Framework Core
Last updated
Was this helpful?
Last updated
Was this helpful?
Entity Framework Core är ett ramverk som gör att man slipper skriva SQL-kommandon själv. EF fungerar som en mellanhand – vi kan säga åt EF hur datan som ska sparas ser ut och vad som ska göras med den, och EF förvandlar det till databaskommandon åt oss, och sköter interaktionen med databasen.
Kör följande kommando för att installera EF-verktygen på din dator:
Lägg till NuGet-paketet Microsoft.EntityFrameworkCore till ditt projekt via eller via :
Skapa en klass för varje typ av objekt som ska lagras i databasen. Det enda som lagras i databasen är klassernas . Tillsammans bildar alla dessa klasser "modellen" för databasen.
Tabellen som skapas för att lagra användare kommer att döpas till samma sak som klassen plus en plural-ändelse (Users). Som primärnyckel för tabellen används första bästa property som antingen heter Id eller klassens namn plus Id.
Modellen kan inkludera , vilket automatiskt leder till att en skapas i databasen.
Man kan använda attribut för att få mer kontroll över databastabellerna som skapas för att motsvara modellen. För att få använda attributen måste man inkludera rätt namespaces:
Används för att ange tabellens namn.
Används för att ange kolumnegenskaper t.ex. namn och vilken ordning kolumnen ska ha i tabellen.
Används för att ange att en viss property inte ska ingå i modellen.
En klass som representerar kopplingen till en databas, och som kommunikationen med database sker genom. Detta kallas en databas-kontext.
Man skapar en egen databaskontext, med egna inställningar, genom att skapa en klass som ärver från DbContext.
Varje klass som ingår i modellen läggs in som en DbSet-property i klassen som ärver från DbContext.
Objektet optionsbuilder används sedan för att göra diverse inställningar. Den viktigaste här är UseSqlite, som gör att databaskontexten kommer att kopplas till en SqLite-databas. Där anges också databasens filnamn.
Migrations används för att antingen generera en databasfil från klasser eller tvärtom. När man genererar en databas utifrån klasser kallas det att man arbetar "code first".
För att skapa och köra migrations behöver man använda terminalen, och man behöver vara i samma mapp som csproj-filen. I Visual Studio Code kan man med andra ord behöva byta till den mappen, t.ex:
En migration är, lite förenklat, en databasförändring. Det betyder att man gör en stor migration i början när man först skapat sin modell, och sedan kan göra förändringar i form av fler migrationer i efterhand.
I exemplet ovan skapas en migration med namnet CreateDB. Alla migrationer behöver ha ett unikt namn. Namnet bestämmer man själv, men undvik mellanslag.
När en ny migration skapats behöver databasen uppdateras.
Om modellen uppdateras behöver alltså en ny migration skapas och därefter behöver databasen uppdateras.
Om man vill kan man skriva sina egna SQL-frågor istället för att gå via Linq. Det gör man då via FromSql-metoden. Den tar emot en formaterbar string som parameter, så använd $ framför första citattecknet. Lägg också till @ ifall du vill dela upp SQL-frågan på flera rader.
När det gäller CUD-operationer (Create, Update och Delete) så innebär de att datan i den lokala databaskontexten först ändras, och sedan måste synkroniseras mot databasen. Synkroniseringen sker via metoden SaveChanges().
Körs inte SaveChanges så försvinner alltså ändringarna när programmet avslutas.
Eftersom DbSets är generiska samlingar så är det ganska enkelt att lägga in ny data i dem:
Börja med att hämta det som ska ändras. Ändra på instansen. Det är allt som krävs! Entity Framework håller reda på objekt som hämtats ut, och ser till att synkronisera deras data med databasen automatiskt.
Börja med att hämta det som ska tas bort. Använd därefter Remove()-metoden för att ta bort det ur databasen.
Används för att ange att en viss property måste ges ett värde och inte får vara tom. Motsvarar .
Sedan skapar man en instans av sin nya DbContext-klass, och via denna instans kan man sedan göra mot databasen.
För att göra egna inställningar i databas-kontexten, gör en av basklassens OnConfiguring-metod.
Man hämtar data från databasen genom att använda sig av olika metoder som ingår i respektive DbSet. Ofta används eller . Vanligast är .
När datan som ska hämtas är lagrad i flera tabeller (dvs det finns en ), behöver man använda Include() för att den extra datan ska laddas in. Resultatet blir då att fungerar.