FluentNHibernate を ORM として使用することを検討していますが、データベースの展開セクションをどのように記述するのが最善か疑問に思っています。私は以前に Entity Framework とコード ファーストの移行の経験がありましたが、FluentNHibernate に興味があるので、いじっています。FunnelWeb ブログを見てきましたが、彼らがどのようにそれを行っているかを実際に理解する時間がまだないので、プロジェクトの非常に特定の部分について助けを求めています。誰かが要約できます。
私の Visual Studio ソリューションは、次のアセンブリに分かれています ( Autofacのような IoC の使用を検討しますが、後で説明します)。
Solution
Domain Assembly
DatabaseDeployment Namespace
Model Namespace
Web UI
したがって、私のドメイン アセンブリでは、コントラクトが次のようになる DBMigrator クラスが必要です。
public interface IDBMigrator
{
bool NeedsUpdating();
void UpdateDatabase();
}
今、私の WebUI アセンブリ (MVC3 プロジェクト) で、次のようなことをしたいと思います (global.asax で):
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
RegisterGlobalFilters(GlobalFilters.Filters);
RegisterRoutes(RouteTable.Routes);
var migrator = new DBMigrator();
if (migrator.NeedsUpdating())
{
migrator.UpdateDatabase();
}
}
このマイグレーターは .sql スクリプトを使用し (データベースのバージョンを Subversion で制御できるようにするため)、スキーマに対してどのスクリプトが実行され、どのスクリプトがまだ実行されていないかを示すテーブルをデータベース内に持っている可能性があります。要約すると、私の実際の質問は次のとおりです。
- データベースの展開をバージョン管理 (および自動化) するために正しい方向に進んでいますか?
- どの時点でプロジェクトのスキーマ変更をチェック (および適用) する必要がありますか? これは本当に自動化する必要があるか、開発者が主導する必要がありますか?
私は現在、DbUpやMigratorDotNetなどのいくつかのフレームワークを検討していますが、このためのフレームワークを採用する前に、まず自分の戦略を頭の中で理解したいと思っています。データベースの移行をどのように処理しますか?