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
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Utilizzo delle Feature flag in ASP.NET Core
Blue/Green Release in locale con .NET Aspire
Creare un extension method per applicare condizionalmente una Where in una query LINQ per Entity Framework
Leggere i parametri da riga di comando in una file based app .NET
GitHub Copilot CLI in ambienti offline
Applicare il progressive enhancement in applicazioni web
Evidenziare una porzione di testo in un pagina dopo una navigazione
Usare la libreria PredicateBuilder per eseguire query tramite Entity Framework che usano or su più campi
Response streaming con Blazor e .NET 10
Controllare la velocità di spostamento su una pagina HTML
Proteggere l'endpoint dell'agente A2A delle Logic App
Utilizzare le direttive più importanti in una file based app .NET


