EF5にはコード優先エンティティモデルがあります。しかし、データベースの変更を手動で管理したいのです。EFに既存のデータベースとそのすべてのデータを変更させたくありません。しかし、EFマッピングとデータベースで並行して変更を加えると、EFはコードを最初に移行する必要があることを通知する適切な操作を拒否します。これをオフにするにはどうすればよいですか?
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);
}
だから私が見つけた最も完全な答えはこれです:
Migrations
フォルダーを削除します。Database.SetInitializer<DatabaseContext>(null);
を設定します。__MigrationHistory
を削除します。 EF6 +の場合、テーブルはTables
の下にありますが、以前のバージョンではSystem Tables
の下にあります。移行を完全にオフにする場合:
https://stackoverflow.com/a/9709407/141172
ただし、コードファーストマイグレーションを有効にしておく方が良いと感じましたが、-Script
オプションを使用して、EFで各データベース(開発、QA、本番)に手動で適用できるDB変更スクリプトを作成します。
Update-Database -Script -ProjectName MyProject -StartupProjectName MyProject
この方法でEFは変更スクリプトを作成しますが、適用される変更を完全に制御できます。他のソースコードと同様に、変更スクリプトをバージョン管理します。
既にMigrationsを使用している場合、Initializerのみを変更しても役に立ちません。 Management Studioに移動し、データベーステーブルを開き、System Tables
フォルダーに移動して、そこにある__MigrationHistory
テーブルを削除する必要があります(EF6以降の場合、Tables
の直下にあります)。これにより、移行が永久に無効になります。
この「問題」を解決したのは
私の環境は
1. Visual Studio 2017 15.8.2
2. ASP NET MVC project
3. .NET Framework 4.6.1
4. Entity Framework 6.2.0