Измените свойство IDENTITY столбца, столбец необходимо удалить и создать заново. - PullRequest
0 голосов
/ 21 ноября 2018

Я использую EF Core 2.1

Это было мое первоначальное определение модели.

public class Customer //Parent
{
    public int Id { get; set; }

    public string Name { get; set; }

    public string Email { get; set; }

    public BankAccount BankAccount { get; set; }

}


public class BankAccount
{
    public int Id { get; set; }

    public string Branch { get; set; }

    public string AcntNumber { get; set; }

    public DateTime CreatedDate { get; set; }

    public int CustomerId { get; set; }

    public Customer Customer { get; set; }

}

Но я понял, что Id & CustomerId обанакладные расходы как отношение «один к одному», я могу обновить определение своей модели BankAccount, как показано ниже.

public class BankAccount
{
    public int Id { get; set; }

    public string Branch { get; set; }

    public string AcntNumber { get; set; }

    public DateTime CreatedDate { get; set; }

    public Customer Customer { get; set; }

}

В то время как в классе DbContext определен основной объект, как показано ниже.

HasOne(b => b.Customer).WithOne(c => c.BankAccount).HasForeignKey<BankAccount>(f => f.Id);

Хотяработает update-database Я получаю сообщение об ошибке ниже.

System.InvalidOperationException: Чтобы изменить свойство IDENTITY столбца, столбец необходимо удалить и создать заново.

Однако в идеале мне не следует просто избавлятьсяиз этой ошибки я удалил столбец, ограничения и таблицу, а затем и всю базу данных.Но все та же ошибка.

Ответы [ 4 ]

0 голосов
/ 18 июня 2019

Я столкнулся с той же проблемой и решил ее двумя шагами и двумя миграциями:

  1. Удалите столбец идентификаторов, прокомментируйте идентификатор в BankAccount и добавьте новый, т. Е. BankAccountId в качестве идентификатора, добавьтемиграция и обновление: этот будет удалять идентификатор и добавлять новый столбец как личность.
  2. Удалять новый добавленный столбец и повторно добавлять предыдущий, комментировать BankAccountId и снимать комментарий Id, добавлять миграцию и обновление: это будетсбросьте BankAccountId и добавьте Id в качестве идентификатора.
0 голосов
/ 03 апреля 2019

У меня была эта проблема, когда я пытался изменить модель с public byte Id {get; set;} на public int Id {get; set;}.Чтобы решить эту проблему, я сделал следующие вещи:

  1. Удалите все миграции до создания целевой модели с Remove-Migration -Project <target_project> в консоли диспетчера пакетов
  2. Удалите фактическую базу данных
  3. Если в середине есть некоторые миграции, которые вы не создали (например, они пришли из другой ветви), скопируйте файлы миграции и также файл ModelSnapshot и вставьте их в свою ветку (перезаписать ихосторожно!).
  4. создайте новую миграцию с помощью add-migration <migration_name> в консоли диспетчера пакетов
  5. обновите базу данных с помощью update-database в консоли диспетчера пакетов

Я могу решить это таким образом, потому что мой код не был в производственной среде.Возможно, вам придется столкнуться с другими сложными проблемами, если модель уже существует.

0 голосов
/ 28 мая 2019

Я удаляю папку Migrations и таблицу _EFMigrationHistory, которая была автоматически сгенерирована.Снова запустил Add-Migration MigrationName в консоли диспетчера пакетов и команду Update-Database, проблема решена.

0 голосов
/ 28 марта 2019

Эта ошибка возникает, когда вы пытаетесь изменить или изменить таблицу, которая уже существует, когда вы хотите изменить схему или таблицу, которая уже существует, какое ядро ​​EF пока не поддерживает, но требует ручного действия.Вот что вы можете сделать по этому поводу:

  • Комментируйте связанный код в файле миграции, чтобы избежать этой ошибки.
  • или Удалите файлы миграции и создайте новый.
  • Удалите вышестоящую миграцию и позвольте миграции генерировать новый код.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...