89

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

4

5 回答 5

105

将 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);
    }
于 2015-04-01T15:26:00.493 回答
44

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

  1. 删除Migrations项目中的文件夹。
  2. Database.SetInitializer<DatabaseContext>(null);在 DatabaseContext 初始化程序中设置。
  3. 删除__MigrationHistory数据库中的表。对于 EF6+,该表位于下面,Tables但对于早期版本,它位于System Tables.
  4. 构建并运行。
  5. 利润。
于 2016-11-11T08:06:16.563 回答
28

如果您想完全关闭迁移:

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

但是,我发现启用代码优先迁移会更好,但使用-Script选项让 EF 为我创建一个数据库更改脚本,我可以手动将其应用于每个数据库(开发、QA、生产):

Update-Database -Script -ProjectName MyProject -StartupProjectName MyProject

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

于 2013-02-01T20:02:10.703 回答
26

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

于 2013-08-08T09:13:55.220 回答
2

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

  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
于 2018-09-10T02:59:54.290 回答