我遵循代码第一种方法来生成EFCore的数据库。 现在,在开发过程中,我的一个模型发生如何在我们的某个客户的实时系统上更新相应的数据库表?我当然不想转储或删除任何数据。
我还在使用.NET Core 1.1.0。
答案 0 :(得分:5)
我担心你不得不吞下药丸。
Database.EnsureCreated()
仅对您不必保存数据的开发非常有用。如果必须保留数据或更改表模式,则必须使用迁移或数据库脚手架(从数据库模式创建模型)。
在任何情况下,在应用/尝试执行以下步骤之前,请先备份生产数据,然后在临时服务器上进行预先尝试。
一个敏感的选择是......
Add-Migration InitialVersion
或dotnet ef migrations add InitialVersion
后跟Update-Database
或dotnet ef database update
Add-Migration ModelUpdateV2
或dotnet ef migrations add ModelUpdateV2
Script-Migration
(感谢@Smit!)或dotnet ef migrations script
。这将生成用于将更改应用于架构的SQL命令从现在开始,您有两种选择:
在数据库中查找__EFMigrationHistory
表在开发数据库上。它应包含一个带有初始迁移名称的条目。将此表导出到生产系统中。然后,应用程序应在下次启动时应用迁移(当您在Startup.cs中调用context.Database.MigrateAsync()
时)。
从现在开始,您应该可以在将来使用迁移
只需从上方执行迁移脚本,无需复制__EFMigrationHistory
,但您必须重复上述步骤。
另一个选择是,始终从数据库创建模型(请参阅dotnet ef dbcontext scaffold
命令(请参阅EF Core Docs),以便将来从数据库模式创建模型。
然后,每次更改表时,都必须创建自己的SQL以进行迁移,并在部署应用程序之前或部署时应用它。