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!