Migrations og opdatering af MySql databaser
Generelt om brugen af Entity Framework Code First og migrations i OS2 Indberetning
Både backend og Api understøttes af MySql databaser, som genereres ved hjælp af Entitiy Frameworket. Databasen skal afspejle den tilstand modelklasserne i Core.DomainModel er i. Laves der ændringer i en model-klasse, skal man gennem package-manageren i Visual Studio køre kommandoen add-migration
(Husk at vælge Infrastructure.DataAccess som default project i package manageren). Dette vil danne en ny migration fil i Infrastructure.DataAccess.Migrations, som indeholder ændringerne der er lavet til model klasserne siden sidste migration. For så at tilføje ændringerne til selve databasen, skal kommandoen update-database
køres, også fra package-manageren. Denne kommando vil tilføje alle migrations der ikke er implementeret på databasen. I backenden vil det være den database der står i DefaultConnection i connections.config der bliver arbejdet på, og i API'et vil det være den der står i connectionstringen i web.config. Når en migration køres på databasen, vil det ikke påvirke eksisterende data, selvfølgelig med mindre migrationen f.eks. sletter en kolonne eller lignende.
EF laver selv en kolonnen _migrationhistory i databasen, hvor man kan se, hvilke migrations der er kørt på databasen. Det er også denne kolonne EF selv bruger til at tjekke hvilke migrations databasen allerede indeholder, når man kører kommandoen update-database
.
Hvis Entity Frameworket ikke finder en database med det navn, der er angivet i connectionstringen, vil der blive oprettet en helt ny database i stedet for.
Sådan køres update-database fra en kommando promt direkte på serveren
Dette kan være nyttigt, hvis man ikke har direkte adgang fra sin lokale maskine til den server databasen ligger på, fx hvis kommunen bruger Citrix i stedet for VPN. Sørg for at den seneste version af systemet er deployet, så de nyeste migrations også ligger på serveren.
- Kopier migrate.exe fra stien \os2indberetning\packages\EntityFramework.6.0.2\tools og læg den op på serveren i projektets bin mappe.
- Lav en .cmd fil med indholdet: \[sti til migrate.exe filen] \[navnet på den assembly hvor migration filerne ligger] /startUpConfigurationFile="\[fuld sti til web.config filen i projektet]" /startupDirectory="\[fuld sti til bin folderen med migration assembly'en]" Se eksempel på .cmd fil nedenfor.
- Eksempel: Eksemplet er en txt-fil, husk at gemme som .cmd i stedet for.
- Kør .cmd filen.
Man kan i nogle tilfælde have brug for at rulle en databases tilstand tilbage til en specifik migration. Hver migration indeholder kode der implementerer ændringer, men også kode der ruller ændringerne tilbage. For at opdatere databasen til en specifik migration, skal der tilføjes "/TargetMigration="[navn på migration]"". Se https://msdn.microsoft.com/en-us/library/jj618307(v=vs.113).aspx for en liste over kommandoer.