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

9

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

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个回答

7

请查看jjslagace在此处给出的答案:

Update-Database尝试进行自动迁移,即使已禁用自动迁移

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

长话短说,请勿手动构建迁移文件。相反,请运行add-migrations命令。这将为您创建迁移,并且您可以在将其应用于数据库之前查看EF希望执行的操作(因为有时它很愚蠢)。如果需要覆盖EF为您生成的内容,请通过覆盖OnModelCreating在您的DBContext类中添加一个Fluent映射。然后再次使用-force选项运行add-migration。 这里是使用Fluent API自定义EF映射的好参考。反复操作,直到您获得所需的迁移,然后运行update-database。

希望有所帮助!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接