Open takachaa opened 7 years ago
パッケージマネージャーコンソールにて以下コマンドを実行すると
PM>Enable-Migrations -ContextTypeName WebApplication3.Models.WebApplication3Context
マイグレーションの基本設定ファイル(Configuration.cs)が作成される
namespace WebApplication3.Migrations
{
using System;
using System.Data.Entity;
using System.Data.Entity.Migrations;
using System.Linq;
internal sealed class Configuration : DbMigrationsConfiguration<WebApplication3.Models.WebApplication3Context>
{
public Configuration()
{
AutomaticMigrationsEnabled = true; //自動マイグレーションは「true」
ContextKey = "WebApplication3.Models.WebApplication3Context"; //完全修飾コンテキスト名
}
protected override void Seed(WebApplication3.Models.WebApplication3Context context)
{
// This method will be called after migrating to the latest version.
// You can use the DbSet<T>.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" }
// );
//
}
}
}
データベースの作成後、コンテキストの背後にあるモデルが変更されました。
Code First Migrationを使用したデータベースの更新を検討してください。
Add-Migration
コマンドを使ってモデルの変更を検出して必要なマイグレーションファイルを自動生成する。PM>Add-Migration AddAddressToMembers
※AddAddressToMembersは意味が分かる名前にする(ファイル名に使われるので)
201709181254154_AddAddressToMembers.cs
namespace WebApplication4.Migrations
{
using System;
using System.Data.Entity.Migrations;
public partial class AddAddressToMembers : DbMigration
{
public override void Up()
{
AddColumn("dbo.Members", "Address", c => c.String());
}
public override void Down()
{
DropColumn("dbo.Members", "Address");
}
}
}
前回のマイグレーションから以降に、エンティティに対して加えられた変更を自動的に認識して、コードを自動生成してくれる。
PM>Update-Database -Verbose
Enable-Migrations -EnableAutomaticMigrations
マイグレーションの基本設定ファイル(Configuration.cs)が作成される
namespace WebApplication5.Migrations
{
using System;
using System.Data.Entity;
using System.Data.Entity.Migrations;
using System.Linq;
internal sealed class Configuration : DbMigrationsConfiguration<WebApplication5.Models.WebApplication5Context>
{
public Configuration()
{
AutomaticMigrationsEnabled = true;
}
protected override void Seed(WebApplication5.Models.WebApplication5Context context)
{
// This method will be called after migrating to the latest version.
// You can use the DbSet<T>.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" }
// );
//
}
}
}
Database.SetInitializer( new MigrateDatabaseToLatestVersion<WebApplication5Context, Configuration>());
プロパティやモデルクラスを削除したいときは以下のように修正
public Configuration()
{
AutomaticMigrationsEnabled = true;
AutomaticMigrationDataLossAllowed = true; //ここ
}
EintityFrameworkのマイグレーションには大きく以下の種類がある
A.自動マイグレーション(Automatic Migration)
マイグレーションの実行時に自動的にモデルの変更を検知し、テーブルレイアウトを最新の状態に移行します。
B.コードベースマイグレーション(Coed-Based Migration)
パッケージマネージャーコンソールからコマンドを発行することで、任意のタイミングでマイグレーション(移行)を実施します。
http://blog.nakajix.jp/entry/2014/07/05/090000