web-dev-qa-db-fra.com

EF 5. "La migration automatique n'a pas été appliquée car cela entraînerait une perte de données" - seul le nom de la colonne a été modifié

J'ai:

AutomaticMigrationsEnabled = True
AutomaticMigrationDataLossAllowed = False

dans mon fichier de configuration et le modèle existant est:

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

Je n'ai fait que modifier la 3ème colonne de "description" en "am_description" et exécuter "update-database -verbose", ce qui a pour résultat "La migration automatique n'a pas été appliquée car elle entraînerait une perte de données"!

Je ne comprends pas cela ... pourquoi ne puis-je pas simplement changer un nom de colonne et mettre à jour la base de données - cela ne devrait pas être un problème de dataloss, si? Est-ce que je fais quelque chose de mal?

19
TheMook

Vous devez éditer votre méthode up et down et remplacer les instructions AddColumn et DropColumn par RenameColumn.

EF ne peut pas détecter si vous renommez une colonne ou si vous souhaitez en supprimer une et en créer une nouvelle.

19
Swell

Ce code ci-dessous n'est pas nécessaire pour exécuter votre migration:

AutomaticMigrationsEnabled = True
AutomaticMigrationDataLossAllowed = False

Et, selon cet article ( de entityframework codeplex ), il s'agit d'une erreur EF et vous pouvez l'ignorer avec l'attribut -Force dans votre migration.

Update-Database -Force

ou

Update-Database -TargetMigration: X -Force

Cela devrait résoudre votre problème.

OMI, vous devriez laisser EF décider du contenu de vos colonnes, à mon avis.

J'ai résolu comme ça, il suffit de taper:

Update-Database -Force

1
mejiamanuel57

Je l'ai également constaté lorsque ma base de données appliquée à une migration est une branche parallèle, que ma branche actuelle n'a aucune connaissance et que je tente de revenir à une migration plus ancienne. La meilleure solution consiste à revenir à la branche de création et à revenir à la dernière migration commune entre les deux branches.

0
Bob Provencher

Mon problème était que je venais d'avoir un autre changement mineur qui était une migration. En essayant de mettre à jour. Vérifiez-le avec Update-Database -Name "peek", juste pour voir si vous en avez aussi.

0
gneric