ASP.NET MVC 5 開発メモ
このサイトは ASP.NET MVC 5 で開発したのでその際に勉強したことを、忘れないように書き残します。
小規模の開発なら自動マイグレーションがとても便利でした。
自動マイグレーション設定
マイグレーションはデータベース(テーブルレイアウト)を作成/変更するための仕組みです。データベースを削除し再度作成すれば必要ないのですが、開発中だと頻繁にモデルの更新が行われる可能性もあります。そのたびに既存のデータが削除されていしまうのも不便です。
そこでマイグレーションを使います。個人、趣味の開発だと自動マイグレーションを有効にしておくと、モデルの更新に合わせて勝手にデータベースを更新してくれるので便利です。使い方は下記の通り。
-
パッケージマネージャーコンソールを使用し、次のコマンドを入力します。
Enable-Migrations -EnableAutomaticMigrations
このコマンドでプロジェクトにマイグレーション用のファイルが自動生成され、準備完了です。しかしこのままではデータのロスを伴う変更(列の削除等)はできません。これも可能にするにはAutomaticMigrationDataLossAllowedプロパティを設定します。
Migrations/Configurations.cs
namespace WebApplication1.Migrations
{
using System;
using System.Data.Entity;
using System.Data.Entity.Migrations;
using System.Linq;
internal sealed class Configuration : DbMigrationsConfiguration
{
public Configuration()
{
// 自動マイグレーションの有効化
AutomaticMigrationsEnabled = true;
// データロスを伴う更新を許可
AutomaticMigrationDataLossAllowed = true;
ContextKey = "WebApplication1.Models.SampleContext";
}
protected override void Seed(WebApplication1.Models.SampleContext context)
{
// This method will be called after migrating to the latest version.
// You can use the DbSet.AddOrUpdate() helper extension method
// to avoid creating duplicate seed data. E.g.
//
// context.People.AddOrUpdate(
// p => p.FullName,
// new Person { FullName = "Andrew Peters" },
// new Person { FullName = "Brice Lambson" },
// new Person { FullName = "Rowan Miller" }
// );
//
}
}
}
- 最後にGlobal.aspxにイニシャライザを設定し、最新のデータベースにデータごと移行するようにします。
Global.aspx
using System.Data.Entity;
using System.Web.Mvc;
using System.Web.Routing;
using WebApplication1.Migrations;
using WebApplication1.Models;
namespace WebApplication1
{
public class MvcApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
RouteConfig.RegisterRoutes(RouteTable.Routes);
// 最新のデータベースにデータごと移行
Database.SetInitializer(new MigrateDatabaseToLatestVersion());
}
}
}
MigrateDatabaseToLatestVersionクラスはデータベースを最新バージョンに移行し、データも最新の状態に移行(既存のデータを引き継ぎ)を可能にします。引数には利用するコンテキスト、マイグレーションを指定します。
これで自動マイグレーションの設定が完了です。アプリケーション起動時にイニシャライザが起動し、常に最新のデータベースがデータを損なわず使用できます。ただし、モデルを削除したりすると、当然当該テーブルが削除されるので、チームでの開発では注意が必要かもしれません。
コメントを書く