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
Utilizzare la libreria Benchmark.NET per misurare le performance
Sfruttare al massimo i topic space di Event Grid MQTT
Configurare dependabot per aggiornare le dipendenze di terze parti con GitHub Actions
Controllare gli accessi IP alle app con Azure Container Apps
Generare file per il download da Blazor WebAssembly
Ottimizzare il mapping di liste di tipi semplici con Entity Framework Core
Effettuare delete massive con Entity Framework Core 7
Ottimizzazione dei block template in Angular 17
Disabilitare automaticamente un workflow di GitHub
Hosting di componenti WebAssembly in un'applicazione Blazor static
Effettuare il deploy di immagini solo da container registry approvati in Kubernetes
I più letti di oggi
- Impostare un elemento come ridimensionabile tramite CSS
- Proteggersi dagli attacchi di Open Redirect in ASP.NET Core MVC
- Personalizzare l'errore del rate limiting middleware in ASP.NET Core
- Accedere alla console di una Azure Container App
- Modificare i metadati nell'head dell'HTML di una Blazor Web App
- Gli oggetti CallOut di Expression Blend 4.0
- SQL Server 2005 December CTP
- Sfruttare le nuove tipologie di input di HTML5 con ASP.NET 4.0
- Upload da una pagina web con Dundas Upload