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?
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.
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
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.
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.