model-view-controller - 实体框架实现代码优先迁移并防止数据丢失
问题描述
如果我想将迁移添加到项目并注意该项目,我想知道什么是最好的指南以及要考虑的事项:
- 上线(开发/登台/生产环境)
- 实时版本的模型已更改,并且删除/添加了一些字段/表格
- 由 Azure 应用服务托管(发布设置)
- 是一个使用 Entity Framework 6 的 MVC 项目,首先使用代码
我知道添加/使用迁移的基础知识,仅此而已。我想知道如何实现对我的解决方案的迁移,发布新项目(更改模型)而不丢失任何数据。
这是可能的吗?任何人都可以向我建议任何可以很好地解释这种设置的东西吗?
编辑 我正在开发中对此进行测试,但如果不重新创建我的数据库,我就无法使其工作,因此会丢失现有数据......
我的配置文件:
public Configuration()
{
AutomaticMigrationsEnabled = true; // tried false as well
ContextKey = "ContractCare.Models.ApplicationDbContext";
AutomaticMigrationDataLossAllowed = false;
}
亲切的问候
解决方案
将空快照迁移添加到您的 DEV 环境。这将捕获该模型的当前状态:
enable-migrations
Add-Migration InitialBaseline –IgnoreChanges // Tells EF not generate Up() code of existing objects
update-database
现在,DEV 中的所有后续更改都可以通过更改连接字符串并重新运行或通过生成可以在这些服务器上运行的脚本来部署到其他环境update-database -Script
。
在此之前,您必须使用已有的流程将其他环境“赶上”到 DEV 状态。然后将InitialBaseline
迁移应用到这些环境。
展望未来,您可以将 DEV 迁移应用到 UAT、STG 并最终应用到 PROD。由于在 DEV 中往往会发生大量迁移,因此您可以将它们汇总到一个迁移中,正如 Chris在此处解释的那样。
推荐阅读
- java - 如何使用 maven 构建 Javafx + Spring 进行生产
- mysql - 具有多个 AND OR 条件的原则
- java - 数组 B 中数组 A 中对象的访问方法
- php - 无法使用正确的用户名和密码登录php和myql
- android - Android 项目无法解析 org.jetbrains.kotlin:kotlin-gradle-plugin:1.2.50
- python - 这是什么意思?为什么需要它?cur_row, cur_col = cur_path[-1]
- docker - 如何使用 Docker 和 DigitalOcean Spaces 部署 TensorFlow Serving
- ios - 使用 Combine 在一天中的特定时间运行代码
- aws-lambda - 在 amazon lex 中管理对话上下文
- session - yii2中用户不活动后自动重定向到登录页面