Thomas Solbjør Mar 14, 2018

Når du oppretter et nytt Episerver prosjekt fra Visual Studio extension så får du en connectionstring slik som dette:

<connectionStrings>
<add name="EPiServerDB" connectionString="Data Source=(LocalDb)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|EPiServerDB_123456.mdf;Initial Catalog=EPiServerDB_123456;Connection Timeout=60;Integrated Security=True;MultipleActiveResultSets=True" providerName="System.Data.SqlClient" />
</connectionStrings>

Så lenge du jobber på din egen maskin som opprettet prosjektet i utgangspunktet har du også fått den nødvendige databasen du trenger. Men hva når en kollega også sjekker ut prosjektet ditt og ønsker å jobbe med løsningen? Alternativet er ofte at det opprettes en felles database som alle utviklere deler på en felles databaseserver. Dette er heller ikke uproblematisk da det kan være versjonsforskjeller som gjør at databasen ikke er i riktig tilpasset den versjonen akkurat du har på din kodebase.

Utviklere liker å ha kontroll på egne ting og det enkleste og beste i slike tilfeller er ofte at utviklingsmiljøet er lokalt på hver enkelt utviklers maskin. Hvis vi beholder connectionstring som blir automatisk opprettet må vi bare sørge for at de nødvendige filene blir opprettet og tilgjenglig hvis de ikke allerede finnes.

Episerver kommer med Powershell moduler som de selv benytter i forbindelse med opprettelsen av prosjeket, men det hindrer ikke oss i å også å gjøre det samme.

I Package Manager Console kan du skrive følgende:

import-module (Get-Item .\packages\episerver.cms.*\tools\episerver.cms.psm1)

Nå får vi tilgang til Episervers Powershell utvidelser. Blant andre disse:

  • GetConnectionString
  • GetEPiDeployPath
  • GetPackagesToolPath

Disse kan vi bruke til å sørge for at vi får opprettet EPiServerDB_123456.mdf og gjøre applikasjonen klar for å kjøres lokalt på utviklers egen maskin.

GetConnectionString gir deg detaljene om connectionstringen som ligger i web.config. For å få path til selve .mdf kan du gjøre slik:

(GetConnectionString).Split(";")[1].Split("=")[1]

En tom Episerver CMS .mdf fil ligger her:

.\packages\episerver.cms.*\tools\episerver.cms.mdf

Og verktøyet Episerver bruker for å oppdatere databasens prosedyrer og tabeller (epideploy.exe) ligger her:

GetEPiDeployPath (Get-Item .\packages\episerver.cms.*\ | Select -First 1) (get-project)

Så til slutt – her er en Powershell one liner for å opprette database og gjøre den klar for deg:

import-module (Get-Item .\packages\episerver.cms.*\tools\episerver.cms.psm1);$mdflocation = (GetConnectionString).Split(";")[1].Split("=")[1];if(test-path $mdflocation){write-host "db already exists"} else{ copy-item -Path (Get-Item .\packages\episerver.cms.*\tools\episerver.cms.mdf | Select -First 1) -Destination @mdflocation -Verbose };& $(GetEPiDeployPath (Get-Item .\packages\episerver.cms.*\ | Select -First 1) (get-project)) -a sql -s $((gi (get-project).Fullname).Directory.FullName) -p $(join-path (GetPackagesToolPath (Get-Item .\packages\episerver.cms.*\ | Select -First 1) $(get-project) "EPiServer.Cms.Core") "episerver.cms.core.sql") -v true -c EPiServerDB;