gpt4 book ai didi

asp.net-core - .NET Core 数据库模型在生产中的变化

转载 作者:行者123 更新时间:2023-12-02 00:43:27 25 4
gpt4 key购买 nike

我遵循代码优先的方法通过 EFCore 生成我的数据库。现在在开发过程中我的一个模型发生了变化。我如何才能在我们的一个客户的实时系统上更新相应的数据库表?我当然不想转储或删除任何数据。

我仍在使用 .NET Core 1.1.0。

最佳答案

我担心你必须吞下药丸。

Database.EnsureCreated() 仅对开发有用,您不必在其中保留数据。如果您必须保留数据或更改表架构,则必须使用迁移或数据库脚手架(从数据库架构创建模型)。

在任何情况下,在应用/尝试以下步骤之前备份生产数据,并在临时服务器上预先试用。

一个棘手的选择是......

  1. 恢复您的代码(即回到您的 VCS 中的旧版本)
  2. 基于它创建一个表布局(运行 Add-Migration InitialVersiondotnet ef migrations add InitialVersion 然后是 Update-Databasedotnet ef 数据库更新
  3. 重新应用您的模型更改(返回到 VCS 中的当前修订版,但将文件保留在迁移文件夹中)
  4. 运行 Add-Migration ModelUpdateV2dotnet ef migrations add ModelUpdateV2
  5. 运行Script-Migration(感谢@Smit!)或dotnet ef migrations script。这将生成一个 SQL 命令,用于将更改应用于架构

从现在开始你有两个选择:

  1. 开发数据库的数据库中查找__EFMigrationHistory 表。它应该包含一个带有您的初始迁移名称的条目。将此表导出到您的生产系统中。然后您的应用程序应该在下次启动时应用迁移(当您在 Startup.cs 中调用 context.Database.MigrateAsync() 时)。

    从现在开始,您将来应该可以使用迁移

  2. 只需从上方执行迁移脚本,无需复制 __EFMigrationHistory,但随后您必须重复上述步骤。

另一种选择是,始终从数据库创建模型(请参阅 dotnet ef dbcontext scaffold 命令(请参阅 EF Core Docs )在将来从数据库模式创建模型。

然后每次更改表时,您都必须创建自己的 SQL 以进行迁移,并在部署应用程序之前或同时应用它。

关于asp.net-core - .NET Core 数据库模型在生产中的变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45286790/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com