Entity Framework Core
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.
Installation
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 NuGet gallery eller via kommandot:
Modellen
Skapa en klass för varje typ av objekt som ska lagras i databasen. Det enda som lagras i databasen är klassernas properties. 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 komposition, vilket automatiskt leder till att en relation skapas i databasen.
Attribut
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:
[Table]
Används för att ange tabellens namn.
[Column]
Används för att ange kolumnegenskaper t.ex. namn och vilken ordning kolumnen ska ha i tabellen.
[NotMapped]
Används för att ange att en viss property inte ska ingå i modellen.
[Required]
Används för att ange att en viss property måste ges ett värde och inte får vara tom. Motsvarar NOT NULL.
DbContext
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.
Sedan skapar man en instans av sin nya DbContext-klass, och via denna instans kan man sedan göra CRUD-operationer mot databasen.
DbSet
Varje klass som ingår i modellen läggs in som en DbSet-property i klassen som ärver från DbContext.
OnConfiguring
För att göra egna inställningar i databas-kontexten, gör en override av basklassens OnConfiguring-metod.
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
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:
Skapa en migration
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.
Uppdatera databasen
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.
Hämta data
Man hämtar data från databasen genom att använda sig av olika metoder som ingår i respektive DbSet. Ofta används Linq-metoder eller Linq-queries. Vanligast är Where.
Include()
När datan som ska hämtas är lagrad i flera tabeller (dvs det finns en relation), behöver man använda Include() för att den extra datan ska laddas in. Resultatet blir då att kompositionen fungerar.
FromSql()
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.
Modifiera data
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.
Stoppa in data
Eftersom DbSets är generiska samlingar så är det ganska enkelt att lägga in ny data i dem:
Modifiera data
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.
Ta bort data
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.
Last updated