【问题标题】:EF Core 3.1 DB First to Code First update old databaseEF Core 3.1 DB First to Code First 更新旧数据库
【发布时间】:2020-06-10 20:39:55
【问题描述】:

目前项目使用Database first的方式,现在由于各种原因改用code first

使用Scaffold-DbContext 我已经从应用了最新更改的开发环境之一生成了DbContext(我们已经有,但可能不太容易出错)。删除了.OnModelCreating() 中复制的.HasConstraintName("");.HasName("");,我创建了Initial migration。到目前为止,一切都很好。

问题在于更新与最新相比旧的现有数据库并保留数据。 使用迁移更新数据库的最佳方法是什么?

我已经在Startup.cs 下的Configure() 方法中添加了这个,如果迁移不存在,则创建数据库,但不确定如何更新没有迁移历史表的旧的现有数据库。

if (!context.Database.EnsureCreated())
                context.Database.Migrate();

【问题讨论】:

    标签: c# entity-framework-core


    【解决方案1】:

    一种解决方案是从旧数据库创建初始迁移并将 MigrationId(例如:20200609075705_Initial)手动放入 dbo.EFMigrationHistoryTable。

    之后,您可以毫无问题地添加新的迁移。

    【讨论】:

    • 那么找到旧数据库,使用旧数据库上下文创建初始迁移,并在每次应用启动时使用该迁移(如果它不在迁移历史记录表中)?
    • 如果迁移历史表中不存在初始迁移,则每次运行应用程序时都会出错(表 x 已存在)。
    • 是的,在.Migrate() 调用之后会出现哪个迁移表,这反过来又会为已经存在的表抛出异常。我的意思是,我最终可以在.Migrate() 之前填充表格,但表格将不存在。
    • 是的,你是对的。也许你也应该手动创建迁移表。
    猜你喜欢
    • 1970-01-01
    • 2020-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多