当然,EF 会将最新的迁移存储到 MigrationHistory 表中,以确定是否已执行特定迁移。
我的问题是关于 EF 正在采取什么措施来防止同时多次执行同一迁移。假设您有两个应用程序,它们使用同一个数据库在不同的应用程序域下运行。两个应用程序同时启动,因此两个应用程序都开始迁移到最新的数据库迁移。假设MigrateDatabaseToLatestVersion
设置为初始值设定项。
我认为上次开始的迁移失败了,因为第一个执行的迁移在之前更新了迁移历史记录表。EF 是否在此处依赖 SQL 事务来回滚为时已晚的迁移?还是使用更智能的机制来阻止第二次迁移的执行?
尽管一些迁移步骤在单独的事务中逐个运行,但情况并不简单。不仅两个(或更多)迁移步骤,而且迁移步骤和正常运行的程序也会干扰。
链接:它有点旧,但很有用
更新:想法可能在这里:
- 马丁·福勒:蓝绿部署
- 零停机时间 – 关系数据库
- 第 3 天 - 零停机时间 MySQL 架构更改