How to manage Migrations in a project with multiple branches?

前端 未结 7 585
情书的邮戳
情书的邮戳 2020-12-12 11:39

I have an ASP.NET MVC3 project that uses Entity Framework 4.3 with the code-first approach. I use Migrations to keep the database up-to-date.

The project is under so

7条回答
  •  挽巷
    挽巷 (楼主)
    2020-12-12 11:54

    There is a much better solution for handling entity framework migration merge conflicts on a similar question.

    All you need to do after a merge is to re-scaffold the meta data of the migration in the target branch. That is you do not rescaffold the up/down code, just the state in the resx-file.

    add-migration [the_migration_to_rescaffold_metadata_for]
    

    This almost always works. The procedure will fail if a different migration in the merge have changed the database in such a way that the migration is no longer runnable or gives an unexpected result. That being said - I believe that to be a very rare case as most migrations should be auto-generated, or at least not be dependent on other tables that are not changed in the migration itself as well.

    One such case where rescaffold state would fail could be:

    • Column foo is an int and rows contain [0, 1, 2]

    • Migration A from branch A change foo to boolean (0 will become false automatically and > 0 will become true)

    • Migration B from branch B change foo to string. It expects it to be an int but it is a boolean, the migration will succeed though. Data will be lost since when migration B was created the rows would contain ["0", "1", "2"]. When migration A altered column to boolean (and did so successfully and with expected result) the rows will now contain ["0", "1", "1"] instead and Migration B will have a different end result than what was observed in Branch B.

    There are probably more edge cases where things could go wrong with the solution. But if migrations up/down code is not dependent on things changed by another migration in the merge it should work well to just update the metadata in the migrations.

提交回复
热议问题