Миграции EF: RenameColumn в автоматических миграциях?

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

update-database -f

Вы получите это:

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

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

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




Ответы (2)


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

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

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

~ Роуэн

person Rowan Miller    schedule 11.09.2012
comment
Просто сделал это в последнем EF (по состоянию на 8 декабря 2014 г.) - и он обнаружил переименование. Не уверен в механизме этого - Роуэн, можешь что-нибудь посоветовать? (сначала код, без аннотаций, без беглости - просто переименовал свойства некоторых классов) - person Kieren Johnstone; 08.12.2014

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

person Ladislav Mrnka    schedule 10.09.2012
comment
Было бы очень полезно сохранить эту информацию из IDE в миграции, поскольку миграция уже использует IDE многими другими способами. - person Chris Moschini; 19.12.2012