.NET Migrations Engineのすべてのオプションを調べましたが、Railsスタイルの移行を使用するエンジンが最も興味深いことがわかりました。これは主に、データベースに依存しない方法で記述されており、別のデータベースに対して簡単に使用できるためです。プラットホーム。
しかし、私はそれらのどれもすぐに解決できないように見える1つの明白な問題を見ました:ソース管理の分岐。
シナリオ
- 機能1はbranch1で開発されており、column1という名前のテーブルに列を追加します。
- 機能2はbranch2で開発されており、column2という名前の同じテーブルに列を追加します
- 機能2を含むリリース1.1が作成されていますが、機能1はまだ完成していません
- 機能1が完了し、トランクにマージされます
- リリース1.2が作成されましたが、トランクに入った新しいcolumn1フィールドはバージョン1(コードで直接リリース1.1に関連付けられている)であったため、移行時にデータベースで更新されません。
Migrator.NETなどのツールでは、問題は、移行バージョンがSCCコミットではなく、実際のソフトウェアリリースに関連していることであるように思われます。ただし、属性はソース管理のコードに追加する必要があります。バージョンの代わりに日付が使用された例を見たことがありますが、それはインクリメンタルバージョン管理以上に目前の問題を解決していないようです。
私が見つけた答えに最も近いのはLiquibaseFAQページでしたが、.NETのRailsスタイルのフレームワークの場合(liquibase変更ログファイルと同様の属性を構造化するRik Migrationsでも)、ソリューションではコードを変更する必要があります。 :
Liquibaseはブランチで動作しますか? はい。それぞれの変更は独立しているため、異なるブランチで行われ、次にマージされたデータベースの変更は、次にLiquibaseが実行されるときに実行されます。ステートメントが実行される順序で問題が発生する可能性がありますが、変更ログファイルを並べ替えることで、問題を簡単に解決できます。
この問題を処理する一般的な方法は何ですか?
違いが生じる場合は、ソース管理にGitを使用しています。複雑な分岐システムでのデータベースの移行というタイトルの投稿はすでに見ましたが、実際には答えが得られなかったことに注意してください。