Использование modelbuilder.hasKey() вызывает ошибку в новых миграциях entity framework

#c# #entity-framework #asp.net-core #entity-framework-core #ef-fluent-api

#c# #entity-framework #asp.net-core #entity-framework-core #ef-fluent-api

Вопрос:

У меня есть некоторые объекты, которые имеют составной ключ в качестве первичного ключа. Я настроил их с помощью FluentAPI для установки составного ключа, например:

 modelBuilder.Entity<EntityWithCompositeKey>().HasKey(entity => new { entity.Property1, entity.Property2});
  

Но я получаю сообщение об ошибке, когда хочу обновить Database-Database после добавления новой миграции:

 System.InvalidOperationException: To change the IDENTITY property of a column, the column needs to be dropped and recreated.
  

После некоторого копания я понял, что из-за этих настроек во FluentAPI для установки составного ключа, я думаю, entity framework хочет изменить первичный ключ объекта, чтобы установить новый составной ключ, и я получаю эту ошибку… Я прав??? Где я ошибся?

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

Я использую Entity Framework 5rc1 и Asp.Net Ядро 3.1

Ответ №1:

Когда вы обновляете первичный ключ столбца, вам необходимо удалить метод migrationBuilder.AlterColumn в записи миграции, не удаляя файл миграции. Это начальная запись.

введите описание изображения здесь

Затем я добавляю объект и перенастраиваю. Удалить migrationBuilder.AlterColumn в Up методе.

введите описание изображения здесь

Ключ в базе данных изменен.

введите описание изображения здесь

Комментарии:

1. Спасибо… Это сработало для меня… Но есть ли способ, который мог бы сделать это автоматически при добавлении новых миграций? Я имею в виду, правильно ли изменять файл миграции вручную? Поскольку не существует только одного объекта, который использует составные ключи, существует почти 10 объектов, и выполнение этой работы каждый раз, когда у нас появляется новая миграция, требует немного времени и … !

2. Я читал официальные документы и подобные проблемы, и на самом деле такого решения нет. Поскольку файл миграции автоматически генерируется Entity Framework, ручное изменение является правильным.