Share via


建立及卸除 API

EnsureCreated()EnsureDeleted() 方法提供移轉 輕量型替代方案,用於管理資料庫架構。 這些方法在資料是暫時性的案例中很有用,而且可以在架構變更時卸載。 例如,在原型設計、測試中,或本機快取。

某些提供者(尤其是非關聯式提供者)不支援移轉。 針對這些提供者, 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();