概要:
概要から始めて、詳細に進みます。私のプロジェクトでは、作業ディレクトリのライブ .sdf データベース ファイルで自動移行が行われません。その .sdf ファイルが存在しなかったかのようです。代わりに、すべての構成アクションは、Program Files/Microsoft Visual Studio 10.0/Common7/IDE
ディレクトリ内に作成される新しい空のデータベース ファイルに対して実行されます。作業ディレクトリにあるライブ .sdf データベース ファイルで動作させるにはどうすればよいですか?
詳細:
このプロジェクトでは、Visual Studio 2010 Ultimate で Code First EF を使用しています。プロジェクトは EF 4.1 で開始され、プロジェクトを EF 4.4 に更新しました。
データベース ファイルは SQL Server Compact Edition 4.0 ファイルで、実行可能ファイルと同じディレクトリ (つまり、作業ディレクトリ) にあります。しばらくの間、すべてが正常に機能していましたが、2 つの新しい DbSet を DbContext に追加し、2 つの新しいテーブルをデータベース ファイルに追加したいと考えています。プログラムの新しいバージョンを顧客に展開するとき、プログラムが 2 つの新しいテーブルをデータベースにシームレスに追加し、何も起こらなかったかのように続行し、他のテーブルの既存のデータはすべてそのままにしておきたいと考えています。
試行 1
http://msdn.microsoft.com/en-US/data/jj554735で説明されているプロセスに従って:
DbContext 派生クラスに 2 つの新しい DbSet を追加しました。プログラムを実行しようとすると、次の例外が発生しました: The model backing the 'DrillContext' context has changed since the database was created. Consider using Code First Migrations to update the database
. まだ移行を有効にしていないので、これは私が予想していたことです。
次に、パッケージ管理コンソールで次のコマンドを発行しました。
Enable-Migrations -EnableAutomaticMigrations.
システムは、ファイルを含むMigrations
ディレクトリを作成しました。Configuration.cs
次に、
Update-Database
コマンド、およびメッセージを取得しましたNo pending code-based migrations
。作業ディレクトリにあるライブ データベース ファイルを確認しましたが、変更されていませんでした。ただし、同じ名前のディレクトリに同じ名前の新しいデータベース ファイルがありProgram Files/Microsoft Visual Studio 10.0/Common7/IDE
、DbContext 派生クラスの 2 つの新しい DbSet に対応する 2 つのテーブルを含む、すべての適切なテーブルを含む空のデータベースでした。_MigrationHistory
単一のエントリを持つという名前の新しいテーブル。ライブ .sdf ファイルは、新しいテーブルもテーブルもなく、そのまま残りました_MigrationHistory
。
「InitialMigration」を使用する試行 2:
http://www.ladislavmrnka.com/2012/03/ef-4-3-migrations-and-existing-database/ごと
2 回目の試行に備えて、3 つのことを行って、プログラムを元の状態 (つまり、移行を試みる前の状態) に復元しました。DbContext 派生クラスから 2 つの新しい DbSet を削除しました。Migrations ディレクトリ (および同梱の Configuration.cs ファイル) を削除し、".../Common7/IDE" ディレクトリ内の不要なデータベース ファイル (.sdf ファイル) を削除しました。
次に、次のコマンドを実行しました。
Enable-Migrations -EnableAutomaticMigrations
Migrations ディレクトリと Configurations.cs ファイルを作成しました。
次に、
Add-Migration InitialMigration -IgnoreChanges
201208281905525_InitialMigration.cs
Migrations ディレクトリにファイルを追加するコマンド。
次に、引用された Web ページの指示に従って、クラスが次のようになるUp
ようにファイル内のメソッドを変更しました。InitialMigration
public partial class InitialMigration : DbMigration
{
public override void Up()
{
Sql("DROP TABLE EdmMetadata");
}
public override void Down()
{
}
}
次に、
Update-Database
コマンドをThe specified table does not exist.
実行すると、作業ディレクトリのライブ データベースをチェックしたところ、データベースに EdmMetadata テーブルが実際に存在することがわかりましたというメッセージが表示されました。次に、.../Common7/IDE
ディレクトリを確認したところ、そこに作成された新しいデータベースにはテーブルがないことがわかりました。
したがって、すべての「移行」アクティビティは.../Common7/IDE
ファイルのバージョンで発生しますが、作業ディレクトリ内のライブ データベース ファイルでは発生しません。
既存のライブデータベースファイルで動作させるにはどうすればよいですか?
ありがとう、