如果模型在EF Core中更改而不進行遷移,則刪除數據庫

asp.net-core c# ef-migrations entity-framework entity-framework-core

在以前版本的實體框架中,如果模型發生更改,可以使用某些類DropDatabseIfModelChanges和其他相關類重新創建數據庫。在EF7或EF Core中,我不知道該怎麼做。運行遷移有時會出現問題,在項目開始時我需要不斷更改模型。

熱門答案

目前還沒有簡單的方法在DropDatabseIfModelChanges中實現DropDatabseIfModelChanges。 EF6通過在__MigrationHistory表中存儲模型的快照並將其與當前模型進行比較來工作。 EnsureCreated在EFCore中不存儲此類信息。

要模仿EFCore中的行為,您可以在EFCore中創建數據庫時手動存儲模型的哈希值,在啟動時檢查哈希值,如果數據庫已更改,則刪除並重新創建數據庫。

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();
}


Related

許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因