创建和删除 API
EnsureCreatedAsync 和 EnsureDeletedAsync 方法为管理数据库架构提供了比 迁移 更轻量的替代方案。 这些方法在数据是暂时性的方案中非常有用的,当架构发生更改时,可以删除这些方法。 例如,在原型制作、测试中或本地缓存中。
某些提供程序(尤其是非关系提供程序)不支持 Migrations。 对于这些提供程序,EnsureCreatedAsync
通常是初始化数据库架构的最简单方法。
警告
EnsureCreatedAsync
和 Migrations 不能很好地协同工作。 如果使用 Migrations,请勿使用 EnsureCreatedAsync
初始化架构。
从 EnsureCreatedAsync
转换到 Migrations 并不是一个无缝的过程。 最简单的方法是删除数据库并使用迁移重新创建数据库。 如果预计将来会使用迁移,最好从 Migrations 开始,而不是使用 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();