2013年5月15日

Visual Studio Express 2012 for Windows Desktop でデータベースのマイグレーション

基盤ライブラリが固まらない

Entity Framework は、使いやすそうでとても素晴らしいのです。
しかし、Express エディションからの使用制限が厳しいので、今回の案件では使用せず、別の ORM・マイグレーションツールを導入する事にしました。

いろいろ探し検討した結果、表題にあるマイグレーションツールについて今回開発に導入する事にしたのは、


です。
NuGetパッケージがあるのと、使用ユーザーが多そうだからというのが、決定の理由です。

導入は、別プロジェクトとして

本体のプロジェクトに導入すると、不要なものが実行ファイルに含まれてしまうので、クラスライブラリのプロジェクトを新たに作成しました。

新たに作成したプロジェクトに NuGet パッケージFlunt Migrator, Flunt Migrator Tools を導入します。


参照設定は自分で

使用するデータベースによって設定するDLL が違うようです。
今回の開発では、MySQLを使用するので、参照設定に  Flunt Migrator Tools でインストールしたパッケージのディレクトリにある Mysql.Data.dll を追加します。
さらに、 MSbuildで実行するので、FluentMigrator.MSBuild.dll も参照設定を行います。

マイグレーション方法

マイグレーションを実行するファイルは
https://github.com/schambers/fluentmigrator/wiki/Migration-Runners#msbuild-runner

で手に入るものを修正しましょう。

私は以下のようにしました。

vi migrations.msbuildproj


<?xml version="1.0"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="Migrate">

   <UsingTask TaskName="FluentMigrator.MSBuild.Migrate"
        AssemblyFile="bin/build/FluentMigrator.MSBuild.dll"/>

  <Target Name="Migrate" >
    <Message Text="Starting FluentMigrator Migration"/>
    <Migrate Database="mysql"
             Connection="Server=サーバIPアドレス;Port=3306;Database=データベース名;User Id=ユーザ名;Password=パスワード;"
             Target="bin/build/project_migrations.dll">
    </Migrate>
  </Target>

  <Target Name="MigrateRollback" >

    <Message Text="Starting FluentMigrator Migration Rollback"/>

    <Migrate Database="mysql"
             Connection="Server=サーバIPアドレス;Port=3306;Database=データベース名;User Id=ユーザ名;Password=パスワード;"
             Target="bin/build/project_migrations.dll"
             Task="rollback">
    </Migrate>
  </Target>

  <Target Name="MigrateRollbackAll" >>
    <Message Text="Starting FluentMigrator Migration Rollback All"/>


    <Migrate Database="mysql"
             Connection="Server=サーバIPアドレス;Port=3306;Database=データベース名;User Id=ユーザ名;Password=パスワード;"
             Target="build/project_migrations.dll"
         Task="rollback:all">
    </Migrate>
  </Target>

</Project>

自動化はできていない

自動化は、まだできていなくて、VS2012の開発コマンドプロンプトから
MSBuild  migrations.msbuildproj
で実行しています。