#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, ручное изменение является правильным.