EF:禁用时自动迁移正在运行

Posted

技术标签:

【中文标题】EF:禁用时自动迁移正在运行【英文标题】:EF: Automatic migrations are running when disabled 【发布时间】:2012-12-21 00:16:03 【问题描述】:

我正在尝试更新构建服务器上的数据库,但它失败了,因为它正在尝试运行自动迁移,即使它们已被禁用。数据库已经存在,我只需要应用最新的迁移。这是我的背景:

public sealed class Configuration : DbMigrationsConfiguration<CableSenseInstanceConfiguratorContext>

    public Configuration()
    
        AutomaticMigrationsEnabled = false;
    

我有一堆手动创建的迁移文件,这是最新的:

public partial class Settings : DbMigration

    public override void Up()
    
        AddColumn("dbo.MasterInstances", "Settings", c => c.String());
    

    public override void Down()
    
        DropColumn("dbo.MasterInstances", "Settings");
    

如果我随后从包管理器控制台手动更新数据库,我会看到它尝试运行自动迁移(由于表已经存在而失败):

Applying code-based migrations: [201204200805145_NoMoreCerts, 201210311451543_SuperUsers, 201301041036414_Settings, 201301041128583_Settings2].
Applying code-based migration: 201204200805145_NoMoreCerts.
Applying automatic migration: 201204200805145_NoMoreCerts_AutomaticMigration.

我的 __MigrationHistory 表只有一个用于初始创建的条目。如何阻止它进行自动迁移?

【问题讨论】:

【参考方案1】:

在此处查看 jjslagace 的答案:

Update-Database tries to do an automatic migration even with automatic migrations disabled

您正在手动构建迁移。我的猜测是实体框架想要添加一些你在迁移脚本中没有的东西,或者它想要以不同的方式命名列等等。EF 有一个大脑,而且这个大脑相当简单。除非您使用 fluent (而不是通过手动创建/调整迁移文件)告诉它,否则它期望事情以某种方式发生。从上面问题的答案看来,有时这会导致您看到的问题。

长话短说,不要手动构建迁移文件。而是运行 add-migrations 命令。这将为您创建迁移,并且您可以看到 EF 在将其应用于您的数据库之前期望做什么(因为有时它很愚蠢)。如果您需要覆盖 EF 为您生成的内容,请通过覆盖 OnModelCreating 在 DBContext 类中添加流畅的映射。然后使用 -force 选项再次运行 add-migration。 Here is a good reference for using the Fluent API 自定义 EF 映射。冲洗并重复,直到获得您正在寻找的迁移然后运行更新数据库。

希望有帮助!

【讨论】:

以上是关于EF:禁用时自动迁移正在运行的主要内容,如果未能解决你的问题,请参考以下文章

如何禁用代码优先迁移

如何禁用代码首次迁移

持续部署的 EF Core Code First 运行时迁移回滚策略

无法在运行时设置 DbContext 连接字符串并将项目与应用程序分开的情况下运行 EF 迁移

运行单元测试时禁用 Django South?

在没有事务的情况下运行 EF 核心迁移?