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);
}
__MigrationHistory
、最新の移行がないという事実を無視したい場合に備えて、DbContextは移行を無視します。とにかくそれをしなさい。私の場合、開発環境で移行を使用しますが、本番環境にデプロイするときは、SSDTを使用してデータベースを更新します。したがって、EFは__MigrationHistory
最新の移行がないためにモデルが変更されたと文句を言いますが、データベースが更新されることは保証できます。
Database.SetInitializer
コンストラクターからクラスコンストラクターに移動することをお勧めします。これにより、呼び出しは1回だけ行われます。
だから私が見つけた最も完全な答えはこれです:
Migrations
プロジェクト内のフォルダを削除します。Database.SetInitializer<DatabaseContext>(null);
DatabaseContext初期化子内に設定します。__MigrationHistory
データベース内のテーブルを削除します。EF6 +の場合、テーブルはの下にありますTables
が、以前のバージョンの場合、テーブルはの下にありSystem Tables
ます。__MigrationHistory
はアプリケーションが起動するたびに存在を確認するため、アプリの起動時間がさらに数ミリ秒長くなります。__MigrationHistory
チェックを完全に無効にする方法はありますか?
移行を完全にオフにしたい場合:
https://stackoverflow.com/a/9709407/141172
ただし、コードの最初の移行を有効にしておく方がよいと思いましたが、-Script
オプションを使用して、各データベース(開発、QA、本番)に手動で適用できるDB変更スクリプトをEFに作成させます。
Update-Database -Script -ProjectName MyProject -StartupProjectName MyProject
そうすれば、EFが変更スクリプトを作成し、適用される変更を完全に制御できます。他のソースコードと同じように変更スクリプトをバージョン管理します。
completely turn off migrations
。これを行うには:Database.SetInitializer<YourContextType>(null)
アプリケーションの起動に追加します
すでに移行を使用している場合は、イニシャライザーのみを変更しても効果はありません。Management Studioに移動し、データベーステーブルを開き、System Tables
フォルダーに移動して、__MigrationHistory
そこにあるテーブルを削除する必要があります(EF6以降の場合は、すぐ下にありますTables
)。これにより、移行が完全に無効になります。
System Tables
。
sp_rename
。初期化子も無効にしました。
私はこの「問題」を
私の環境の設定は次のとおりです
1. Visual Studio 2017 15.8.2
2. ASP NET MVC project
3. .NET Framework 4.6.1
4. Entity Framework 6.2.0
_MigrationHistory
テーブルが自動的に作成され ますか?