Code First op AppHarbor

Op dit moment wordt er les gegeven in MVC 4 voor de derdejaars. Dit doen we samen met Centric die ook deels de lessen verzorgen. Een van de benaderingen binnen MVC 4 en het Entity Framework is Code First, waarbij de programmeur de classes OO maakt en daaruit het datamodel genereerd. Echter als je dit op AppHarbor wilt deployen, loop je tegen een foutmelding aan. Dit komt, omdat je de database moet laten genereren.

CreateDatabaseIfNotExists

Binnen je solution is het belangrijk dat je instelt dat de database wordt aangemaakt op het moment dat deze niet bestaat. Dat kan je doen in je Global.asax.cs. In de InitializeDb methode zet je de volgende code:

public class MvcApplication : System.Web.HttpApplication
{
    protected void Application_Start()
    {
        InitializeDb();

        AreaRegistration.RegisterAllAreas();

        WebApiConfig.Register(GlobalConfiguration.Configuration);
        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        RouteConfig.RegisterRoutes(RouteTable.Routes);
        BundleConfig.RegisterBundles(BundleTable.Bundles);
        AuthConfig.RegisterAuth();
    }

    private static void InitializeDb()
    {
        // Initializer code here
        Database.SetInitializer(new CreateDatabaseIfNotExists<MassEmailerContext>());
    }
}

De Database.SetInitializer zorgt er hier voor dat de database wordt aangemaakt op het moment dat deze nog niet bestaat. Je hebt niet de rechten om de database de droppen, dus DropCreateDatabaseIfModelChanges werkt niet. MassEmailerContext is mijn custom context voor het Entity Framework. Dit kan je gewoon vervangen door je eigen context.

Cloud Database

De volgende stap is het opnieuw toevoegen van de SQL server op AppHarbor. Als je nog niets in je database hebt staan, dan zit je goed. Anders is het belangrijk dat je een lege toevoegt. Nadat je dit hebt gedaan is het belangrijk dat je de Alias van de SQL server zet naar de naam van je Entity Framework connectie. Dit zorgt ervoor dat, tijdens het deployen, de SQL connectie string wordt vervangen door die van AppHarbor. Dan hoef je deze niet zelf aan te passen in je web.config.

<connectionStrings>
  <add name="MassEmailerContext" connectionString="Data Source=(localdb)\v11.0; Initial Catalog=MassEmailerContext-20130313212705; Integrated Security=True; MultipleActiveResultSets=True; AttachDbFilename=|DataDirectory|MassEmailerContext-20130313212705.mdf" providerName="System.Data.SqlClient" />
</connectionStrings>

Hier gaat het dus om de naam MassEmailerContext uit het ‘name’ attribuut. Deze zet je in je Alias van de SQL server. Ga daarvoor naar je Applicatie binnen AppHarbor, dan bij Add ons SQL Server, dan Go To SQL Server en Edit Alias bij Connectionstring Alias. Zet deze naar de naam uit de ‘name’ attribuut.

Pas nu de solution pushen. AppHarbor zal de connectionstring vervangen en de MVC 4 applicatie zal de benodigde tabellen automatisch aanmaken wanneer deze nodig zijn.

Succes!

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Verplichte velden zijn gemarkeerd met *

Zoals de meeste websites gebruiken we cookies om een meer persoonlijke en snelle service te bieden.

Wij gebruiken cookies zodat onze website meer efficiënt kan functioneren, om de prestaties te verbeteren en, eventueel, om op maat reclame van onze partners aan te bieden. Als u doorgaat gaan we ervan uit dat u akkoord gaat alle cookies te krijgen van onze website.

To accept cookies please Click To Continue