Context.Database.EnsureCreated()与迁移(Migrations)的区别

情形一

如果找不到数据库,则会自动创建一个数据库并使用测试数据加载。

如果找到数据库,但没有一张表存在,则会自动创建表并使用测试数据加载。

如果找到数据库,表存在但没有数据,则会使用测试数据加载。

情形二

如果找到数据库,具有任何一张表且表中有数据,则不执行任何操作。

情形三

当数据模型(比如添加字段)发生更改时,自然而然紧接着我们需要更新SeedData.csInitialize()方法内的测试数据。

重新启动应用,首先会使用EnsureDeleted()删除数据库以确保数据库在每次执行测试/原型之前处于干净状态,然后会使用EnsureCreated()重新创建新数据库。

应用场景

EnsureCreated() 和 EnsureDeleted() 方法可以被认为提供了一种可用于管理数据库架构的迁移(Migrations)的轻型替代方案。

当数据是暂时性数据,并且可以在架构更改时删除时,这种方案非常有用。例如,在原型制作期间、测试期间或用于本地缓存时。

这种使数据库与数据模型保持同步的方法适用于多种情况,但将应用程序部署到生产环境的情况除外。 当应用程序在生产环境中运行时,它通常会存储要保留的数据,以便不会在每次更改(如添加新列)时丢失所有数据。 EF Core 迁移功能可通过使 EF 更新数据库架构而不是创建新数据库来解决此问题。

某些提供程序(尤其是非关系提供程序)不支持 迁移(Migrations)。 对于这些提供程序,EnsureCreated() 通常是初始化数据库架构的最简单方法。

与迁移(Migrations)的区别

当数据模型(比如添加字段)发生更改时,迁移会修改数据库(不会丢失任何数据),而不会像EnsureCreated()删除和重新创建新数据库。

EnsureCreated() 和 迁移(Migrations) 不能很好地协同工作。如果使用 迁移(Migrations),请勿使用 EnsureCreated() 初始化架构。

从 EnsureCreated() 不能无缝转换到 迁移(Migrations),只能删除数据库,然后使用 迁移(Migrations) 重新创建新数据库。如果预计将来会使用迁移(Migrations),最好从 迁移(Migrations) 开始,而不是使用 EnsureCreated()

原创文章,作者:huoxiaoqiang,如若转载,请注明出处:https://www.huoxiaoqiang.com/experience/csharpe/15165.html

(0)
上一篇 2022年6月4日 22:11
下一篇 2022年6月5日 23:46

相关推荐

发表评论

登录后才能评论