5

概要:

概要から始めて、詳細に進みます。私のプロジェクトでは、作業ディレクトリのライブ .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.csMigrations ディレクトリにファイルを追加するコマンド。

次に、引用された 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ファイルのバージョンで発生しますが、作業ディレクトリ内のライブ データベース ファイルでは発生しません。

既存のライブデータベースファイルで動作させるにはどうすればよいですか?

ありがとう、

4

0 に答える 0