Strategie di inizializzazione del database con Entity Framework Code First

di Matteo Tumiati, in LINQ, Entity Framework,

L'inizializzazione del database è una parte fondamentale quando iniziamo a lavorare con Entity Framework: la prima volta il database viene sempre creato da zero, ma per le volte successive il comportamento può variare in base alle nostre esigenze.

Ci sono tre strategie differenti di inizializzazione:

  • CreateDatabaseIfNotExists: è la strategia di default applicata da EF e, come suggerisce il nome, il database viene creato solamente se non esiste;
  • DropCreateDatabaseIfModelChanges: il database viene distrutto e creato di nuovo solo se il modello è cambiato;
  • DropCreateDatabaseAlways: il database viene sempre distrutto e ricreato ogni volta che viene lanciata l'applicazione, indipendentemente dal fatto che il modello sia cambiato.

Si può impostare la strategia di inizializzazione scelta direttamente all'interno del costruttore della classe DbContext:

public class MyDBContext : DbContext 
{ 
  public MyDBContext(): base("MyConnString") 
  {
    Database.SetInitializer<MyDBContext>(new CreateDatabaseIfNotExists<MyDBContext>());
  }
}


Nel caso in cui nessuna delle tre strategie standard di Entity Framework dovesse andare bene, possiamo sempre crearne una custom:

public class MyDBInitializer : CreateDatabaseIfNotExists<MyDBContext>
{
  protected override void Seed(MyDBContext context)
  {
    base.Seed(context);
  }
}

Eventualmente, si può anche impostare la strategia di inizializzazione all'interno del file app.config:

<configuration>
    <appSettings>    
    <add key="DatabaseInitializerForType MyDataLayer.MyDBContext, MyDataLayer"
            value="MyDataLayer.MyDBInitializer, MyDataLayer" />
    </appSettings>
</configuration>

Qualora dovessimo andare in produzione, converrebbe invece disabilitare la strategia di inizializzazione per evitare la perdita di dati esistenti all'interno del database:

Database.SetInitializer<MyDBContext>(null);

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

I più letti di oggi