How can I disable code first migrations

2020-01-29 03:52发布

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?

5条回答
【Aperson】
2楼-- · 2020-01-29 04:06

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.

查看更多
霸刀☆藐视天下
3楼-- · 2020-01-29 04:11

So the most complete answer that I have found is this:

  1. Delete Migrations folder inside your project.
  2. Set Database.SetInitializer<DatabaseContext>(null); inside your DatabaseContext initializer.
  3. Delete the table __MigrationHistory inside your database. For EF6+ the table is located under Tables but for earlier versions it is located under System Tables.
  4. Build and run.
  5. Profit.
查看更多
做自己的国王
4楼-- · 2020-01-29 04:13

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.

查看更多
我欲成王,谁敢阻挡
5楼-- · 2020-01-29 04:14

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);
    }
查看更多
够拽才男人
6楼-- · 2020-01-29 04:25

I just resolved this "issue" by

  1. Deleting table "_MigrationHistory" from the database.
  2. Deleting "Migrations" folder form the project.
  3. Updating EDMX file.
  4. Clean project & rebuild it.

My envirment is

1. Visual Studio 2017 15.8.2
2. ASP NET MVC project
3. .NET Framework 4.6.1
4. Entity Framework 6.2.0
查看更多
登录 后发表回答