Entity framework EF:禁用时将运行自动迁移

Entity framework EF:禁用时将运行自动迁移,entity-framework,entity-framework-5,database-migration,Entity Framework,Entity Framework 5,Database Migration,我正在尝试更新生成服务器上的数据库,但它失败了,因为它正在尝试运行自动迁移,即使它们已被禁用。数据库已经存在,我只需要应用最新的迁移。以下是我的背景: public sealed class Configuration : DbMigrationsConfiguration<CableSenseInstanceConfiguratorContext> { public Configuration() { AutomaticMigrationsEnabl

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

public sealed class Configuration : DbMigrationsConfiguration<CableSenseInstanceConfiguratorContext>
{
    public Configuration()
    {
        AutomaticMigrationsEnabled = false;
    }
}
如果我随后从package manager控制台手动更新数据库,我会看到它试图运行自动迁移(由于表已经存在,迁移失败):


My _MigrationHistory表只有一个初始创建条目。如何阻止它执行自动迁移?

请查看jjslagace的答案:

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

长话短说,不要手动构建迁移文件。而是运行addmigrations命令。这将为您创建迁移,您可以在将EF应用到数据库之前看到EF希望执行的操作(因为有时它很愚蠢)。如果需要重写EF为您生成的内容,请通过重写OnModelCreating在DBContext类中添加一个流畅的映射。然后使用-force选项再次运行addmigration。要保管EF映射。冲洗并重复,直到获得要进行的迁移,然后运行更新数据库

希望有帮助

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.