Я получаю сообщение об ошибке. Операция завершилась неудачно, потому что индекс или статистика с именем «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 конечно) и заново создать пустую базу данных, тогда вы снова увидите эту ошибку. Почему эта ошибка происходит в первую очередь?
К сожалению, это не сработало для меня. Вместо этого я могу попытаться использовать аннотации данных. –