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 m
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);
}
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.
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.
I just resolved this "issue" by
The config of my environment is following
1. Visual Studio 2017 15.8.2
2. ASP NET MVC project
3. .NET Framework 4.6.1
4. Entity Framework 6.2.0
So the most complete answer that I have found is this:
Migrations
folder inside your project. Database.SetInitializer<DatabaseContext>(null);
inside your DatabaseContext initializer. __MigrationHistory
inside your database. For EF6+ the table is located under Tables
but for earlier versions it is located under System Tables
.