情形一
如果找不到数据库,则会自动创建一个数据库并使用测试数据加载。
如果找到数据库,但没有一张表存在,则会自动创建表并使用测试数据加载。
如果找到数据库,表存在但没有数据,则会使用测试数据加载。
情形二
如果找到数据库,具有任何一张表且表中有数据,则不执行任何操作。
情形三
当数据模型(比如添加字段)发生更改时,自然而然紧接着我们需要更新SeedData.cs
中 Initialize()
方法内的测试数据。
重新启动应用,首先会使用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