Tengo:

AutomaticMigrationsEnabled = True
AutomaticMigrationDataLossAllowed = False

en mi archivo de configuración y el modelo actual es:

Public Property ID() As Integer
Public Property ERP_ArticleCode() As String
Public Property description() As String

Todo lo que hice fue cambiar la 3ª columna de «descripción» a «am_description» y corrió «de la actualización de la base de datos -verbose» que resultó en un «migración Automática no se aplicó porque resultaría en la pérdida de datos»!

Yo no entiendo esto… ¿por qué no puedo cambiar el nombre de una columna y actualización de la base de datos – esto no debería ser un dataloss problema, si? Estoy haciendo algo mal?

  • ¿cómo podría saber que están cambiando la columna y no está eliminando y añadiendo una nueva?
  • Comentario justo. Así que la única manera de arreglar esto es manualmente chang el «hasta» método y hacerlo «alter column» en lugar de «eliminar» y luego «agregar»?
InformationsquelleAutor TheMook | 2013-08-01

6 Comentarios

  1. 19

    Deberá modificar su arriba y abajo de método y reemplazar el AddColumn y DropColumn instrucciones con RenameColumn.

    EF no puede detectar si vas a cambiar el nombre de una columna o si desea eliminar uno y crear una nueva.

    • Si está utilizando SQL Server Compact, esto no funciona. «Directo columna el cambio de nombre no es compatible con SQL Server Compact. Para cambiar el nombre de una columna en SQL Server Compact, usted tendrá que volver a crear.»
  2. 35

    Este código siguiente no es necesario para ejecutar la Migración:

    AutomaticMigrationsEnabled = True
    AutomaticMigrationDataLossAllowed = False

    Y, de acuerdo a este artículo (de entityframework codeplex), este es un EF error y usted puede ignorar este con -Force atributo en su migración.

    Update-Database -Force

    o

    Update-Database -TargetMigration: X -Force

    Se debería resolver su problema.

    De la OMI, usted debe dejar EF decidir lo que hace con sus columnas, es sólo mi opinión.

    • Usted realmente y verdaderamente ignore el error con la Fuerza o AutomaticMigrationDataLossAllowed = True. Este es un es cosa peligrosa para poner en el código que va a llegar a producción. Ser seguro que desea ignorar el problema, ya que puede perder los datos de la producción si no se tiene cuidado.
    • es cierto, usted tiene que tener cuidado con los códigos y NO promover a la producción, sin saber lo que están haciendo.
  3. 1

    He resuelto como este, simplemente escriba:

    – Actualización De Base De Datos De La Fuerza De

    • Pero todo lo que hace es forzar la pérdida de datos! No se refiere a por qué el marco de la entidad piensa que debe haber pérdida de datos, la cual se explica claramente por kirsten g de arriba. Simplemente primordial y obligando a la base de datos para actualizar y perder los datos no es un escenario ideal para la mayoría de los que me gustaría tener, aunque.
  4. 0

    Mi problema era que yo tenía otro cambio menor que en sí era una migración. Al intentar actualizar. Consulte con Update-Database -Name "peek", sólo para ver si usted tiene demasiado.

  5. 0

    También he visto esto cuando tengo una migración aplicado a mi base de datos que está en una rama paralela, que mi rama actual no tiene conocimiento de y yo intento de volver a algunos viejos de la migración. La mejor solución no es volver a la creación de la rama y volver a la última migración común entre las dos ramas.

  6. -7

    Usted tiene que cambiar la línea

    AutomaticMigrationDataLossAllowed = False

    a

    AutomaticMigrationDataLossAllowed = True

    Nota: tomar medidas de precaución para el uso de cierto sólo en su entorno de desarrollo, ya que puede resultar en la pérdida de datos después de que se ha implementado para la producción.

    • No. Esto es igual para mejaiamanuel57 la respuesta anterior. Obligando a la base de datos para colocar datos es OCULTAR el problema, no resolverlo. Kirsten G ha explicado la situación a la perfección, esto no puede ser tratado de forma automática, se requiere la intervención del usuario en la EF Código y RenameColumn debe utilizarse en su lugar.

Dejar respuesta

Please enter your comment!
Please enter your name here