У меня есть мой первоначальный файл миграции, в котором есть все таблицы сущностей, и база данных обновляется и имеет все таблицы. Теперь я хочу изменить таблицу и изменить кластеризованный индекс от первичного ключа к другому индексу. Ниже приведены модификации кода. Здесь я сделал две небольшие изменения, установив кластеризацию в значение false для первичного ключа и значение true для другого индекса. Не уверен, что это сработает, потому что теперь я получаю сообщение об ошибке при попытке обновить базу данных.После изменения таблицы файла миграции, как мне обновить мою базу данных?
CreateTable(
"dbo.YogaSpaceEvents",
c => new
{
YogaSpaceEventId = c.Int(nullable: false, identity: true),
Title = c.String(),
DateTimeScheduled = c.DateTime(nullable: false),
AppointmentLength = c.Int(nullable: false),
StatusEnum = c.Int(nullable: false),
YogaSpaceRefId = c.Int(nullable: false),
})
.PrimaryKey(t => t.YogaSpaceEventId, clustered: false)
.ForeignKey("dbo.YogaSpaces", t => t.YogaSpaceRefId, cascadeDelete: true)
.Index(t => t.DateTimeScheduled, clustered: true)
.Index(t => t.YogaSpaceRefId);
При запуске обновления-базы данных я получаю сообщение об ошибке говорящее «субъект„blahblah“уже существует в базе данных». Это происходит из первого заявления «CrateTable» в файле миграции. Каковы шаги по обновлению базы данных с моими изменениями в файле миграции? Нужно ли создавать другой файл миграции только с изменениями?
привет. Возможно, я могу перефразировать мой вопрос: как изменить таблицу в файле миграции? Я могу сказать «add-migration ChangeIndex» и создать новый файл. В этом файле я хотел бы изменить некоторые индексы таблиц (например, удалить кластер из первичного ключа в другой индекс), а затем обновить базу данных. – user1186050
Насколько я знаю, кластеризованный индекс на столе может быть установлен только тогда, когда он создается. Механизм миграции EF недостаточно велик, чтобы распознать это.Поэтому в вашем случае вам придется удалить таблицу YogaSpaceEvents (инструкцию DropTable) и создать ее еще раз с помощью инструкции CreateTable. Разумеется, вам нужно отказаться от любых внешних ключей, ссылающихся на вашу таблицу, а также перед тем, как отбросить. Если вы хотите сохранить свои данные из YogaSpaceEvents, вместо того, чтобы сбросить изменения, введите имя с помощью RenameTable, затем создайте новую таблицу, скопируйте данные с помощью функции Sql и отбросьте старую таблицу. – mr100