2016-11-17 5 views
0

Я получаю сообщение об ошибке. Операция завершилась неудачно, потому что индекс или статистика с именем «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);

Это создает следующий DbMigration при выполнении команды Add-Migration CreateUniqueIndexAddressesTable ,

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()); 
    } 
} 

Если удалить индекс, а затем excersize код, который настроен для запуска, если есть какие-либо миграции базы данных, то все работает хорошо (без ошибок), как и ожидалось, но если удалить всю базу данных (в среде Dev конечно) и заново создать пустую базу данных, тогда вы снова увидите эту ошибку. Почему эта ошибка происходит в первую очередь?

ответ

1

У меня было лицо с той же проблемой, что и с первым подходом кода с mysql. Если вы используете базу данных mysql, попробуйте удалить dbo префикс из вашего кода. Поэтому для Up напишите CreateIndex("Addresses", new[] { "address1", "city", "state", "postal_code" }, unique: true, name: "IX_address_unique");. Для down напишите DropIndex("Addresses", "IX_address_unique");. Надеюсь, он должен работать для u.

+0

К сожалению, это не сработало для меня. Вместо этого я могу попытаться использовать аннотации данных. –

 Смежные вопросы

  • Нет связанных вопросов^_^