Nella versione precedente del framework entità, è possibile ricreare il database se il modello cambia, utilizzando alcune delle classi DropDatabseIfModelChanges e altre classi correlate. In EF7 o EF Core non so come farlo. Eseguire le migrazioni alcune volte dare problemi e all'inizio del progetto ho bisogno di cambiare costantemente i modelli.
Attualmente non esiste un modo semplice per implementare DropDatabseIfModelChanges
in EFCore. EF6 ha lavorato memorizzando un'istantanea del modello nella tabella __MigrationHistory
e confrontandola con il modello corrente. Nessuna informazione di questo tipo è memorizzata da EnsureCreated
in EFCore.
Per simulare il comportamento in EFCore, è possibile memorizzare manualmente un hash del modello ogni volta che si crea il database in EFCore, controllare l'hash all'avvio e rilasciare e ricreare il database se è stato modificato.
var currentHash = MyHashingFunction(db.Model);
if (db.GetService<IRelationalDatabaseCreator>().Exists()
&& !db.Set<ModelHash>().Any(mh => mh.Value == currentHash))
{
// Drop if changed
db.Database.EnsureDeleted();
}
if (db.Database.EnsureCreated())
{
// Insert hash if created
db.Add(new ModelHash { Value = currentHash });
db.SaveChanges();
}