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
Personalizzare le pagine di errore su Azure App Service
Esporre un server MCP con Azure API Management
Integrare modelli AI in un workflow di GitHub
Creare comandi nella dashboard .NET Aspire
Utilizzare Locust con Azure Load Testing
Centralizzare gli endpoint AI Foundry con Azure API Management
Self-healing degli unit test con Copilot in GitHub
Gestire pubblicazione Kubernetes tramite .NET Aspire
Utilizzare AbortController per cancellare operazioni asincrone in JavaScript
Configurare OpenAI in .NET Aspire
Gestione dei prompt file a livello di organizzazione aziendale in GitHub
Eseguire query in contemporanea con EF
I più letti di oggi
- Future Dev Day - Milano
- Global Azure 2026 - ASPItalia.com - Milano
- Gestire il ciclo di vita di AbortController in Javascript
- Meno password, meno segreti, meno rischio. Al Global Azure 2026 di ASPItalia.com, Stefano Mostarda parlerà di Azure Managed Identity e di come adottare un approccio zero credentials per far comunicare in modo sicuro i servizi cloud, senza gestire credenziali nel codice o nelle pipeline. È uno dei pattern raccomandati da Microsoft per ridurre il carico operativo e migliorare la sicurezza. Milano, 16 aprile 2026. #GlobalAzure #Azure #ManagedIdentity #Security #ASPItalia https://aspit.co/globalazure-26




