我首先在 MVC 5、EF 5.0 代码中进行开发。我使用文件共享文件夹发布项目。
当模型发生变化时,我可以使用数据库迁移来更新正在开发的 localDb。但是,在我将项目发布到远程服务器后,它显示了模型被更改的错误,并且在使用完整 SQL 数据库服务器的生产 Web 服务器上需要迁移。
我知道我可以删除生产服务器上的数据库并让它重新创建数据库。但是,表中已经有用户输入的数据。
有没有办法在不重新创建数据库的情况下应用模型/数据库更改?
我首先在 MVC 5、EF 5.0 代码中进行开发。我使用文件共享文件夹发布项目。
当模型发生变化时,我可以使用数据库迁移来更新正在开发的 localDb。但是,在我将项目发布到远程服务器后,它显示了模型被更改的错误,并且在使用完整 SQL 数据库服务器的生产 Web 服务器上需要迁移。
我知道我可以删除生产服务器上的数据库并让它重新创建数据库。但是,表中已经有用户输入的数据。
有没有办法在不重新创建数据库的情况下应用模型/数据库更改?
是的,有办法。其实有好几个。
您可以生成可应用于生产数据库的 SQL 脚本。使用 -Script 标志在包管理器控制台中运行更新数据库,如下所示:
更新数据库-脚本-SourceMigration:InitialMigration -TargetMigration:LatestMigration
或者使用像 Red Gate SQL Compare 这样的工具来生成脚本。
在应用程序启动时,您可以通过注册 MigrateDatabaseToLatestVersion 数据库初始化程序来自动升级数据库:
Database.SetInitializer(new MigrateDatabaseToLatestVersion());
您可以在文章MSDN-Code First Migrations中阅读有关这两种方法的更多信息。
我从来没有选择删除生产中的数据库。EF code first 不是为了那个目的,它只是为了开发,
有几个选项,如果您使用 Visual Studio Ultimate,SQL 菜单下有一个架构比较工具。或者,您可以使用 Red Gate SQL 比较工具。