mar*_*ine 1 entity-framework-core .net-core asp.net-core
我遵循代码优先方法通过EFCore生成数据库。现在在开发过程中,我的一个模型发生了变化。如何在一个客户的实时系统上更新相应的数据库表?我当然不想转储或删除任何数据。
我仍然在.NET Core 1.1.0上。
我担心那时候您必须吞下药丸。
Database.EnsureCreated()仅对无需保存数据的开发有用。如果必须保留数据或更改表架构,则必须使用迁移或数据库支架(从数据库架构创建模型)。
无论如何,在应用/尝试以下步骤之前,请对生产数据进行备份,然后在登台服务器上进行尝试。
一种敏感的选择是...
Add-Migration InitialVersion或dotnet ef migrations add InitialVersion后跟Update-Database或dotnet ef database updateAdd-Migration ModelUpdateV2或dotnet ef migrations add ModelUpdateV2Script-Migration(感谢@Smit!)或 dotnet ef migrations script。这将生成一个SQL命令,用于将更改应用到架构从现在开始,您有两种选择:
在开发数据库上的数据库中查找__EFMigrationHistory表。它应包含一个带有您的初始迁移名称的条目。将此表导出到生产系统中。然后,您的应用程序应在下次启动时(在Startup.cs中调用时)应用迁移。context.Database.MigrateAsync()
从现在开始,您将来应该可以使用迁移
只需从上方执行迁移脚本,而无需复制over __EFMigrationHistory,那么您将不得不重复上述步骤。
另一个选择是,始终从数据库创建模型(请参阅dotnet ef dbcontext scaffold命令(请参阅EF Core Docs),以后再从数据库架构中创建模型。
然后,每次更改表时,都必须创建自己的SQL进行迁移,并在部署应用程序之前或期间应用该SQL。
| 归档时间: |
|
| 查看次数: |
741 次 |
| 最近记录: |