如何禁用代码首次迁移

时间:2013-02-01 19:59:20

标签: entity-framework migration code-first

我在EF5中有一个代码优先的实体模型。但我想手动管理数据库更改 - 我不希望EF修改我现有的数据库及其所有数据。但是当我在EF映射和数据库中进行并行更改时,EF拒绝正常运行,告诉我需要先使用代码迁移。我该怎么关掉它?

5 个答案:

答案 0 :(得分:85)

将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);
    }

答案 1 :(得分:36)

所以我找到的最完整的答案是:

  1. 删除项目中的Migrations文件夹。
  2. 在DatabaseContext初始值设定项中设置Database.SetInitializer<DatabaseContext>(null);
  3. 删除数据库中的表__MigrationHistory。对于EF6 +,该表位于Tables下,但对于早期版本,该表位于System Tables下。
  4. 构建并运行。
  5. 利润。

答案 2 :(得分:24)

如果您想完全关闭迁移:

https://stackoverflow.com/a/9709407/141172

但是,我发现最好保持代码首次迁移,但使用-Script选项让EF为我创建一个DB更改脚本,我可以手动应用于每个数据库(开发,QA,生产) :

Update-Database -Script -ProjectName MyProject -StartupProjectName MyProject

这样EF就会为我创建更改脚本,而且我仍然可以完全控制所应用的更改。我像其他任何源代码一样对更改脚本进行版本化。

答案 3 :(得分:21)

如果您已经使用过迁移,那么仅更改初始化程序将无济于事。您需要转到Management Studio,打开数据库表,转到System Tables文件夹并删除位于那里的__MigrationHistory表(对于EF6及更高版本,它位于Tables的正下方)。这将禁用迁移。

答案 4 :(得分:0)

我刚刚解决了这个“问题”,

  1. 从数据库中删除表“ _MigrationHistory”。
  2. 从项目中删除“迁移”文件夹。
  3. 更新EDMX文件。
  4. 清理项目并重建它。

我的环境是

1. Visual Studio 2017 15.8.2
2. ASP NET MVC project
3. .NET Framework 4.6.1
4. Entity Framework 6.2.0