Миграции EF: переименовать столбцы в автоматические миграции? - программирование
Подтвердить что ты не робот

Миграции EF: переименовать столбцы в автоматические миграции?

Если вы переименуете свойство, Visual Studio IDE достаточно умна, чтобы помочь вам реорганизовать переименование этого свойства во всем коде. Если это переименование находится на модели, используемой в EF Migrations, и вы запускаете стандартную автоматическую миграцию, например:

update-database -f

Вы получите следующее:

AddColumn("NewName"...
DropColumn("OldName"...

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

Я использую EF 5.0 в VS2012, но это поведение появляется и в EF 4.3.1 и VS2010.

4b9b3361

Ответ 1

Миграции не могут автоматически определять переименование свойства и столбца. Миграция лесов будет содержать Drop/Create, который вам нужно будет изменить в Rename.

Если вы просто переименуете столбец (добавив аннотацию [Column] к свойству), мы можем обнаружить это как переименование, потому что мы можем сопоставлять имя свойства, к которому сопоставляется столбец.

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

~ Роуэн

Ответ 2

Мое мнение: EF не знает, что вы переименовали существующий столбец. Рефакторинг - это изменение времени разработки без постоянной информации об изменении, поэтому при запуске миграции EF просто не знает, как различаться между переименованием и реальным удалением/добавлением нового столбца.