【问题标题】:Create the database with __MigrationHistory in EF Core6在 EF Core6 中使用 __MigrationHistory 创建数据库
【发布时间】:2022-01-28 18:54:59
【问题描述】:

我将 .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);

不会创建表,因为我的初始迁移是空的。

这里用迁移历史初始化一个空数据库的正确方法是什么?

【问题讨论】:

    标签: c# entity-framework-core


    【解决方案1】:

    我自己解决这个问题的方法是根据当前模型生成一个完整的初始迁移(不是空迁移),就像数据库还不存在一样。然后在新的本地数据库上调用MigrateAsync。这会将迁移插入到您的本地 __MigrationHistory 表中。然后将该行从本地 __MigrationHistory 表插入到生产数据库的 __MigrationHistory 表中。

    现在您的生产数据库将跳过初始迁移,但如果您需要将它用于另一个数据库,您可以从头开始构建它。

    【讨论】:

    • 这可行,但取决于生产数据库的数量。对于 OnPremise 解决方案,它不起作用。
    • @SebastianStehle 我不明白你的意思?什么取决于生产数据库的数量?本地解决方案有什么问题?
    • 我的意思是你的解决方案有效,但是没有简单的自动化是很糟糕的。但我想你的解决方案是最好的
    • 是的,我同意这种情况并不容易解决......
    猜你喜欢
    • 2022-01-10
    • 2017-09-26
    • 2020-12-16
    • 1970-01-01
    • 2013-01-28
    • 2020-12-03
    • 2019-07-11
    • 2019-10-22
    • 2019-09-04
    相关资源
    最近更新 更多