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
Recuperare gli audit log in Azure DevOps
Impostare automaticamente l'altezza del font tramite CSS
Ridimensionamento automatico input tramite CSS
DevSecOps per .NET: dalla teoria alla pratica
Integrare modelli AI in un workflow di GitHub
Ottimizzare le performance usando Span<T> e il metodo Split
Esporre tool MCP con Azure Functions
Utilizzare @property per animare nativamente un oggetto HTML tramite CSS
Configurare lo startup di applicazioni server e client con .NET Aspire
Escludere alcuni file da GitHub Copilot
Loggare le query più lente con Entity Framework
Creare espressioni riutilizzabili nelle query LINQ per Entity Framework
I più letti di oggi
- Utilizzare @property per animare nativamente un oggetto HTML tramite CSS
- Effettuare un clone parziale di un repository di GitHub
- Self-healing degli unit test con Copilot in GitHub
- Utilizzo delle stepped value functions nel CSS
- Personalizzare le pagine di errore su Azure App Service
- Integrare Agenti A2A in Azure API Management
- Scegliere la strategia di traduzione della Contains in Entity Framework 10


