1

Nous utilisons la première approche du code EF6 et nous avons activé les migrations automatiques (nous sommes au début du projet).EF 6 nom de la colonne de migration automatique majuscule renommée non détectée

Database.SetInitializer(new MigrateDatabaseToLatestVersion<OurDbContext, Configuration>()); 

Et dans la classe de configuration, nous avons ce qui suit est activée pour que la DB à être mis à jour automatiquement lors de chaque démarrage de l'application:

public Configuration() 
    { 
     AutomaticMigrationsEnabled = true; 
     AutomaticMigrationDataLossAllowed = true; 
    } 

Les noms de colonnes DB sont explicitement mis en correspondance comme celui-ci (avec " HasColumnName ") parce que nous voulons avoir un contrôle total sur les noms de colonnes:

modelBuilder.Entity<User>().Property(u => u.Gender).IsRequired().HasColumnName("Gender"); 

Je viens de remarquer aujourd'hui que quand j'ai changé le nom de la colonne mappée à b Egin avec un ex minuscule:

modelBuilder.Entity<User>().Property(u => u.Gender).IsRequired().HasColumnName("gender"); 

... la migration automatique ne détecte pas cela comme une modification de la DB et ne fait rien dire que le nom de la colonne DB reste le même (« genre » avec un g majuscule).

Il était seulement après avoir changé le nom de la colonne à un autre mot ex:

modelBuilder.Entity<User>().Property(u => u.Gender).IsRequired().HasColumnName("genders"); 

... qui a provoqué les migrations automatiques de réellement changer le nom de la colonne dans la base de données, ce qui indique que en quelque sorte le chèque Le nom de colonne est fait de manière insensible à la casse.

Est-ce que quelqu'un sait si c'est par conception, ou est-ce un bug dans EF? De plus, existe-t-il un moyen de forcer les migrations automatiques à effectuer des vérifications de noms de colonnes sensibles à la casse?

Merci à l'avance

+1

J'imagine qu'il est intentionnel puisque la base de données ne se soucie pas de cas les noms de colonnes sensibles. – Dismissile

Répondre

0

sensibilité de cas ne fait pas beaucoup de différence à DB, donc je crois que c'est intentionnel.

Si vous ne souhaitez pas le nom de la colonne minuscule, juste contourner ce problème:

  1. Renommer la colonne de « genre » à quelque chose comme « genres ». Ajouter une migration
  2. Renommez la colonne en "Sexe". Ajouter la migration

Vous pouvez modifier manuellement le code de migration généré

+0

J'ai déjà fait une solution de contournement comme vous l'avez suggéré mais je n'aime vraiment pas avoir à le faire manuellement. Je m'attendrais à ce qu'il y ait un moyen de forcer le script de migration à effectuer le changement de cas directement. – aristov

+0

Je ne pense pas qu'il existe d'autres moyens qui en valent la peine. Bien que cette solution de contournement implique certaines étapes manuelles, elle est rapide et nécessaire qu'une seule fois. Je ferais mieux de passer du temps sur des tâches plus importantes. Mais comme toujours, c'est juste mon opinion;) – SoftwareFactor

Questions connexes