ASP.NET MVC3 + EF4.1 CodeFirst på Binero

Jag har gjort en sajt i ASP.NET MVC3 med EntityFramework 4.1 (magic unicorn edition) CodeFirst och publicerat den på webbhotellet Binero. Vad jag förstår är jag den första att göra det, och det kräver lite pillande att få det att fungera.

Det första problemet är att EF4.1 vill skapa en databas som heter som din DbContext. På Binero heter din databas något med ditt kundnummer först, och du kan inte döpa din DbContext till det. Jag misstänker att det beror på att ett klassnamn måste börja på en bokstav.

Lösningen på detta är att tvinga din DbContext att använda en ConnectionString. Man kan ju tycka att det borde vara en enkel match, och det är det när man vet hur man gör. Det krävdes en del sökande för att hitta lösningen, men här är den:

public MyDbContext() : base(“ConnectionStringName”)

Alltså, det jag gör är att se till att konstruktorn till min DbContext ärver av sig själv med namnet på din ConnectionString som parameter.

Nästa problem är att EntityFramework CodeFirst vill köra DropAndCreate på databasen när du förändrar strukturen på dina klasser. Binero stödjer inte detta (och antagligen inga andra webbhotell heller) och därför måste du få EntityFramework att istället bara återställa tabellerna. Nu finns det ingen sådan lösning out-of-the-box, men däremot finns det en att installera på NuGet.

Med den installerad ser klassen ut så här:

namespace MyProject.Models {
public class MyDbContext : DbContext
{
public MyDbContext() : base(“ConnectionStringName”)
{
System.Data.Entity.Database.SetInitializer(new DontDropDbJustCreateTablesIfModelChanged<MyProject.Models.MyDbContext>());
}
public DbSet<MyProject.Models.MyClass> Elephants { get; set; }
}
}

Så enkelt kan det vara när man vet hur man gör. Lycka till!

About Stefan Bergfeldt

Jag som kallar mig för Ordbajsarn heter egentligen Stefan Bergfeldt. Jag föddes på Falu lasarett i augusti 1978, och är uppväxt i Hedemora. Webbutvecklare, sökmotoroptimerare, entreprenör och gitarrist är andra saker man kan kalla mig, om inte Ordbajsarn passar. Jag driver konsultfirman CRS Webbproduktion, och har specialiserat mig på att ta fram kostnadseffektiva webblösningar till små- och medelstora företag.