获取索引已经存在的表错误,首先迁移实体框架代码



我得到错误-操作失败,因为索引或统计名称'IX_address_unique'已经存在于表'dbo.Addresses'上。所讨论的索引是一个复合索引,我使用代码首先创建EF版本6。下面是DbContext类中的代码-

// create unique address composite index based on properties // address1 property modelBuilder.Entity<Address>().Property(t => t.address1) .HasMaxLength(250) .IsRequired() .HasUniqueIndexAnnotation("IX_address_unique", 0); // city property modelBuilder.Entity<Address>().Property(t => t.city) .HasMaxLength(50) .IsRequired() .HasUniqueIndexAnnotation("IX_address_unique", 1); // state property modelBuilder.Entity<Address>().Property(t => t.state) .HasMaxLength(50) .IsRequired() .HasUniqueIndexAnnotation("IX_address_unique", 2); // postal code property modelBuilder.Entity<Address>().Property(t => t.postal_code) .HasMaxLength(20) .IsRequired() .HasUniqueIndexAnnotation("IX_address_unique", 3);

当您运行Add-Migration CreateUniqueIndexAddressesTable命令时,将创建以下DbMigration。

public partial class CreateUniqueIndexAddressesTable : DbMigration
{
    public override void Up()
    {
        AlterColumn("dbo.Addresses", "address1", c => c.String(nullable: false, maxLength: 250));
        AlterColumn("dbo.Addresses", "address2", c => c.String(maxLength: 250));
        AlterColumn("dbo.Addresses", "city", c => c.String(nullable: false, maxLength: 50));
        AlterColumn("dbo.Addresses", "state", c => c.String(nullable: false, maxLength: 50));
        AlterColumn("dbo.Addresses", "postal_code", c => c.String(nullable: false, maxLength: 20));
        CreateIndex("dbo.Addresses", new[] { "address1", "city", "state", "postal_code" }, unique: true, name: "IX_address_unique");
    }
    public override void Down()
    {
        DropIndex("dbo.Addresses", "IX_address_unique");
        AlterColumn("dbo.Addresses", "postal_code", c => c.String());
        AlterColumn("dbo.Addresses", "state", c => c.String());
        AlterColumn("dbo.Addresses", "city", c => c.String());
        AlterColumn("dbo.Addresses", "address2", c => c.String());
        AlterColumn("dbo.Addresses", "address1", c => c.String());
    }
}

如果你删除索引,然后运行代码,如果有任何数据库迁移,那么一切工作正常(没有错误),但如果你删除整个数据库(当然是在开发环境中),并重新创建空数据库,那么你将再次看到这个错误。为什么会发生这种错误呢?

我面对同样的问题与代码优先的方法与mysql数据库工作。如果您正在使用mysql数据库,请尝试从代码中删除dbo前缀。向上写CreateIndex("Addresses", new[] { "address1", "city", "state", "postal_code" }, unique: true, name: "IX_address_unique");。写下DropIndex("Addresses", "IX_address_unique");

最新更新