How can I disable code first migrations
I have a code-first entity model in EF5. But I want to manage the database changes manually -- I do not want EF to modify my existing database and all its data. But when I make parallel changes in the EF mapping and in the database, EF refuses to operate properly telling me I need to use code first migration. How do I turn this off?
Solution 1:
set the Database.SetInitializer to 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);
}
Solution 2:
So the most complete answer that I have found is this:
- Delete
Migrations
folder inside your project. - Set
Database.SetInitializer<DatabaseContext>(null);
inside your DatabaseContext initializer. - Delete the table
__MigrationHistory
inside your database. For EF6+ the table is located underTables
but for earlier versions it is located underSystem Tables
. - Build and run.
- Profit.
Solution 3:
If you want to completely turn off migrations:
https://stackoverflow.com/a/9709407/141172
However, I found it better to keep code first migrations enabled, but use the -Script
option to have EF create a DB change script for me that I can apply to each database (development, QA, Production) manually:
Update-Database -Script -ProjectName MyProject -StartupProjectName MyProject
That way EF will create the change script for me, and I still have full control over changes being applied. I version the change scripts like any other source code.
Solution 4:
If you already used Migrations then changing only Initializer won't help. You need to go to Management Studio, open your database tables, go to System Tables
folder and remove __MigrationHistory
table that is located there (for EF6 and above, it's located directly under Tables
). This will disable Migrations for good.