16

Si cambia el nombre de una propiedad, el IDE de Visual Studio es lo suficientemente inteligente como para ayudarlo a refactorizar a cambiar el nombre de esa propiedad en todo su código. Si ese cambio de nombre está en un modelo utilizado en EF migraciones, y se ejecuta una migración automática estándar como:EF Migrations: RenameColumn en Migraciones automáticas?

update-database -f 

Usted obtendrá esto:

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

No es lo que quería. Obviamente, ejecutar Add-Migration en este punto le permitirá ingresar y cambiar manualmente estas 2 llamadas a una única llamada a RenameColumn, pero ¿hay alguna manera de hacer que Automatic Migrations haga esto automáticamente? ¿Alguna aproximación al cambio de nombre de propiedad que no estoy haciendo bien, tal vez?

Estoy usando EF 5.0 en VS2012, pero este comportamiento también aparece en EF 4.3.1 y VS2010.

Respuesta

23

Las migraciones no pueden detectar automáticamente el cambio de nombre de una propiedad y columna. La migración con scaffolded contendrá un Drop/Create que necesitará cambiar a un Rename.

Si cambia el nombre de la columna (agregando una anotación [Columna] a la propiedad) podemos detectar eso como un cambio de nombre porque podemos hacer coincidir el nombre de la propiedad asignada a la columna.

Consideramos agregar un modificador -Renames al comando Add-Migration, pero al final decidimos que editar el código generado era más fácil que resolver la sintaxis para proporcionar renombrados en la línea de comando.

~ Rowan

+1

Acabo de hacer esto en la última EF (desde el 8 de diciembre de 2014) y detectó un cambio de nombre. No estoy seguro del mecanismo de esto - Rowan, ¿puede aconsejarme en absoluto? (código primero, sin anotaciones, sin fluidez, acaba de renombrar las propiedades en algunas clases) –

5

Mi opinión: EF no tiene idea de que ha cambiado el nombre de la columna existente. Refactorizar es el cambio de tiempo de diseño sin ninguna información persistente sobre el cambio, por lo que cuando ejecuta migraciones, EF simplemente no sabe cómo diferir entre el cambio de nombre y la eliminación real/adición de una nueva columna.

+0

Sería muy útil que persista esta información desde el IDE a migraciones embargo, ya que las migraciones ya aprovechar el IDE de muchas otras maneras. –

Cuestiones relacionadas