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