建立和刪除 API
EnsureCreatedAsync 和 EnsureDeletedAsync 方法提供用於管理資料庫架構的輕量型替代 移轉。 這些方法在數據是暫時性的案例中很有用,而且可以在架構變更時卸除。 例如,用於原型設計、測試或本機快取。
某些提供者(尤其是非關係型提供者)不支援移轉。 針對這些提供者,EnsureCreatedAsync
通常是初始化資料庫架構的最簡單方式。
警告
EnsureCreatedAsync
和遷移無法很好地搭配運作。 如果您使用移轉,請勿使用 EnsureCreatedAsync
來初始化架構。
從 EnsureCreatedAsync
轉換至移轉並非順暢的體驗。 最簡單的方法是卸除資料庫,並使用移轉重新建立資料庫。 如果您預期未來使用移轉,最好從移轉開始,而不是使用 EnsureCreatedAsync
。
EnsureDeletedAsync
如果資料庫存在,則 EnsureDeletedAsync
方法將會卸除資料庫。 如果您沒有適當的許可權,則會拋出例外狀況。
// Drop the database if it exists
await dbContext.Database.EnsureDeletedAsync();
EnsureCreatedAsync
如果資料庫不存在,EnsureCreatedAsync
將會建立資料庫,並初始化資料庫架構。 如果有任何數據表存在(包括另一個 DbContext
類別的數據表),則不會初始化架構。
// Create the database if it doesn't exist
dbContext.Database.EnsureCreatedAsync();
提示
這些方法的異步版本也可供使用。
SQL 腳本
若要取得 EnsureCreatedAsync
所使用的 SQL,您可以使用 GenerateCreateScript 方法。
var sql = dbContext.Database.GenerateCreateScript();
多個 DbContext 類別
EnsureCreated 僅適用於資料庫中沒有數據表時。 如有需要,您可以撰寫自己的檢查,以查看架構是否需要初始化,並使用基礎 IRelationalDatabaseCreator 服務來初始化架構。
// TODO: Check whether the schema needs to be initialized
// Initialize the schema for this DbContext
var databaseCreator = dbContext.GetService<IRelationalDatabaseCreator>();
databaseCreator.CreateTables();