【问题标题】:Application startup exception: System.Data.Entity.Migrations EntityFramework应用程序启动异常:System.Data.Entity.Migrations EntityFramework
【发布时间】:2022-10-14 23:11:34
【问题描述】:

项目在本地工作,但在发布时返回启动错误。 应用程序启动异常:

标准输出返回

应用程序启动异常:System.Data.Entity.Migrations.Infrastructure.AutomaticDataLossException:未应用自动迁移,因为它会导致数据丢失。在 DbMigrationsConfiguration 上将 AutomaticMigrationDataLossAllowed 设置为“true”,以允许应用自动迁移,即使它们可能会导致数据丢失。或者,使用带有“-Force”选项的 Update-Database,或构建显式迁移。 在 System.Data.Entity.Migrations.DbMigrator.AutoMigrate(字符串 migrationId,VersionedModel sourceModel,VersionedModel targetModel,布尔降级)

我已经使用了 Update-Database -Force,成功但没有积极的结果和错误继续(数据库已完全更新)

有没有人遇到过这个问题或类似的问题?

【问题讨论】:

  • 你有明确的迁移还是只使用自动迁移?这通常表明数据库迁移、显式代码迁移和生产应用程序配置的数据库都不一致。
  • 当你说Update-Database 工作时,它是在更新生产数据库吗?
  • 只有自动迁移。不是生产,开发/认证数据库

标签: c# .net entity-framework migration


【解决方案1】:

项目在本地工作,但在发布时返回启动错误。

如果您的Release 配置没有相同的数据库连接字符串,这很常见。如果您希望您的发布版本使用相同的数据库,你一直在调试的那个,然后检查你的发布版本的输出文件夹中没有不同的配置文件。

未应用自动迁移,因为它会导致数据丢失。

这表明两件事:

  1. 您使用的是自动迁移,而不是显式迁移
  2. 所需的架构更改是删除表、列、外键
    • 另一种常见的数据丢失情况是重命名表或列时。如果 EF 没有将更改检测为重命名而是实施,这仍然是第二个问题放下并创造逻辑。

    (如异常消息中的指示)理想的解决方案是使用显式迁移,这样您就可以为可能导致数据丢失的特定版本实现自己的自定义迁移逻辑。对于这个特定的模式版本,您可能只需要一个显式迁移。

    在重构涉及多个更改的操作之后,潜在的改名动作可能不明确或根本未检测到。在显式迁移中,您可以将删除和重新创建逻辑替换为重命名操作,您还可以更改删除和添加/创建的顺序以允许您添加新列或表,然后添加 SQL 语句以从中迁移数据旧实现到新实现,然后在减轻数据丢失后执行 drop 语句。

    使用-Force 选项并不总是有效。它将允许您绕过警告,但它不会帮助 SQL 执行将违反数据库模式约束。如果-Force 不起作用,要进一步调试,请捕获详细输出以分析导致进程失败的最后一条 SQL 语句:

    Update-Database -Force -Verbose
    

    其他解决方法:

    • 手动删除生产数据库,这将导致重新创建架构以匹配您的 EF 数据模型。这当然会导致数据完全丢失,因此它仅适用于基本上首次或 OOTB 应用程序部署。
    • 手动删除有问题的架构元素

【讨论】:

    猜你喜欢
    • 2019-11-04
    • 1970-01-01
    • 1970-01-01
    • 2023-03-16
    • 2021-11-29
    • 2014-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多