建立及卸除 API
和 方法提供移轉的輕量型替代方案,以管理資料庫架構。 EnsureDeleted()EnsureCreated() 這些方法在資料是暫時性的案例中很有用,而且可以在架構變更時卸載。 例如,在原型設計期間、測試中或本機快取。
某些提供者 (特別是非關聯式提供者,) 不支援移轉。 對於這些提供者, EnsureCreated
通常是初始化資料庫架構的最簡單方式。
警告
EnsureCreated
和移轉無法一起運作。 如果您使用移轉,請勿使用 EnsureCreated
來初始化架構。
從 EnsureCreated
轉換至移轉不是順暢的體驗。 最簡單的做法是卸載資料庫,並使用移轉重新建立資料庫。 如果您預期未來使用移轉,最好只從移轉開始,而不是使用 EnsureCreated
。
EnsureDeleted
如果資料庫存在,方法 EnsureDeleted
將會卸載資料庫。 如果您沒有適當的許可權,則會擲回例外狀況。
// Drop the database if it exists
dbContext.Database.EnsureDeleted();
EnsureCreated
EnsureCreated
如果資料庫不存在,則會建立資料庫,並初始化資料庫架構。 如果有任何資料表存在, (包含另一個 DbContext
類別) 的資料表,則不會初始化架構。
// Create the database if it doesn't exist
dbContext.Database.EnsureCreated();
秘訣
您也可以使用這些方法的非同步版本。
SQL 指令碼
若要取得 所使用的 EnsureCreated
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();