在 EF Core6 中使用 __MigrationHistory 创建数据库
Create the database with __MigrationHistory in EF Core6
我在现有数据库中使用 .NET Core 6 和 EF Core 6。我们必须对此数据库进行一些更改,因此我们引入了 EF Core 6 迁移。为了让它与初始数据库一起工作,我们必须创建一个空的初始创建。因此,当我们 运行 迁移脚本时,会添加新列。
问题是:如何在本地机器上创建用于开发目的的初始数据库?
如果我使用这种方法
var databaseCreator = (RelationalDatabaseCreator)dbContext.Database.GetService<IDatabaseCreator>();
await databaseCreator.CreateTablesAsync(cancellationToken);
表已创建,但没有迁移历史记录,因此后续迁移将失败。
如果我只是运行迁移
await context.Database.MigrateAsync(cancellationToken);
将不会创建表,因为我的初始迁移是空的。
此处使用迁移历史初始化空数据库的正确方法是什么?
我自己解决这个问题的方法是根据当前模型生成一个完整的初始迁移(而不是空迁移),就像数据库还不存在一样。然后在新的本地数据库上调用 MigrateAsync
。这会将迁移插入到您的本地 __MigrationHistory table。然后将该行从本地 __MigrationHistory table 插入生产数据库的 __MigrationHistory table.
现在您的生产数据库将跳过初始迁移,但如果您需要它用于另一个数据库,您可以从头开始构建它。
我在现有数据库中使用 .NET Core 6 和 EF Core 6。我们必须对此数据库进行一些更改,因此我们引入了 EF Core 6 迁移。为了让它与初始数据库一起工作,我们必须创建一个空的初始创建。因此,当我们 运行 迁移脚本时,会添加新列。
问题是:如何在本地机器上创建用于开发目的的初始数据库?
如果我使用这种方法
var databaseCreator = (RelationalDatabaseCreator)dbContext.Database.GetService<IDatabaseCreator>();
await databaseCreator.CreateTablesAsync(cancellationToken);
表已创建,但没有迁移历史记录,因此后续迁移将失败。
如果我只是运行迁移
await context.Database.MigrateAsync(cancellationToken);
将不会创建表,因为我的初始迁移是空的。
此处使用迁移历史初始化空数据库的正确方法是什么?
我自己解决这个问题的方法是根据当前模型生成一个完整的初始迁移(而不是空迁移),就像数据库还不存在一样。然后在新的本地数据库上调用 MigrateAsync
。这会将迁移插入到您的本地 __MigrationHistory table。然后将该行从本地 __MigrationHistory table 插入生产数据库的 __MigrationHistory table.
现在您的生产数据库将跳过初始迁移,但如果您需要它用于另一个数据库,您可以从头开始构建它。