web-dev-qa-db-ja.com

Code First Migrationsを無効にする方法

EF5にはコード優先エンティティモデルがあります。しかし、データベースの変更を手動で管理したいのです。EFに既存のデータベースとそのすべてのデータを変更させたくありません。しかし、EFマッピングとデータベースで並行して変更を加えると、EFはコードを最初に移行する必要があることを通知する適切な操作を拒否します。これをオフにするにはどうすればよいですか?

78
Stan Hargrove

database.SetInitializerをnullに設定します。

public class DatabaseContext: DbContext
{
    //the base accepts the name of the connection string provided in the web.config as a parameter
    public DatabaseContext()
        : base("DatabaseContext")
    {
        //disable initializer
        Database.SetInitializer<DatabaseContext>(null);
    }
89
Sarath Rachuri

だから私が見つけた最も完全な答えはこれです:

  1. プロジェクト内のMigrationsフォルダーを削除します。
  2. DatabaseContext初期化子内でDatabase.SetInitializer<DatabaseContext>(null);を設定します。
  3. データベース内のテーブル__MigrationHistoryを削除します。 EF6 +の場合、テーブルはTablesの下にありますが、以前のバージョンではSystem Tablesの下にあります。
  4. ビルドして実行します。
  5. 利益。
37
karlingen

移行を完全にオフにする場合:

https://stackoverflow.com/a/9709407/141172

ただし、コードファーストマイグレーションを有効にしておく方が良いと感じましたが、-Scriptオプションを使用して、EFで各データベース(開発、QA、本番)に手動で適用できるDB変更スクリプトを作成します。

Update-Database -Script -ProjectName MyProject -StartupProjectName MyProject

この方法でEFは変更スクリプトを作成しますが、適用される変更を完全に制御できます。他のソースコードと同様に、変更スクリプトをバージョン管理します。

25
Eric J.

既にMigrationsを使用している場合、Initializerのみを変更しても役に立ちません。 Management Studioに移動し、データベーステーブルを開き、System Tablesフォルダーに移動して、そこにある__MigrationHistoryテーブルを削除する必要があります(EF6以降の場合、Tablesの直下にあります)。これにより、移行が永久に無効になります。

22
Episodex

この「問題」を解決したのは

  1. データベースからテーブル「_MigrationHistory」を削除しています。
  2. プロジェクトから「移行」フォルダーを削除します。
  3. EDMXファイルを更新しています。
  4. プロジェクトをクリーンアップして再構築します。

私の環境は

1. Visual Studio 2017 15.8.2
2. ASP NET MVC project
3. .NET Framework 4.6.1
4. Entity Framework 6.2.0
0
Developer