EntityFramework基于代码的迁移,如何确定顺序?

16
我正在使用EF 5.0,想要开始使用基于代码的迁移
我使用了fluent migrator,其中有一个迁移顺序的概念。无论数据库的迁移版本如何,都可以迁移/回滚迁移。
Entity Framework是否具有类似的功能?
我计划为每个数据库版本保留多个迁移实现(可能首先与sprint编号相关联)。
为什么我想要这个?
我们的持续集成将为每个环境迁移数据库。我们的Dev构建可能只落后一版,但当我们进入QA或PROD环境时,数据库将落后于多个迁移。
也许我走错了路,如果是这样,我很想听听关于使用CI进行迁移的最佳方法的意见。
1个回答

20

是的,EF具有此功能。

当您运行Add-Migration时,您会注意到迁移文件以时间戳为前缀。这就是确定顺序的方法,假设自动迁移已被禁用并且一直被禁用。

如果您同时使用显式迁移和自动迁移,则可以注意到生成与您的迁移一起的.resx文件中存在一个额外的Source属性。这是EF确定在运行显式迁移之前是否需要运行自动迁移的方式。

我的经验告诉我这些准则:

1)永远不要使用自动迁移。

2)团队中的每个开发人员在创建新的显式迁移之前都应确保拥有最新的代码。显而易见的是,从陈旧的代码创建迁移将导致问题。

3)开发人员应确保如果他们在迁移的Up()方法中编写自定义SQL,则编写适当的代码(并进行测试!)以在Down() 方法中撤销这些更改。


2
好的观点,干杯。我认为直到你意识到EF有一个当前模型的二进制表示被隐藏起来无法合并/更新时,2)才不是显而易见的。(另请参阅https://dev59.com/9mTVa4cB1Zd3GeqP_hFG#10694348)这就是功能分支的全部内容 :-/ - Tim Abell
1
我认为你仍然可以使用功能分支,只需在你的功能合并之前,使用rebase获取他们的代码,回滚你的迁移,并重新创建你的迁移,使用他们的新快照(并在其他人提交之前快速完成!) - Simon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接