J'essaie de comprendre les différents types de chemins de migration que nous pouvons choisir lors du développement d'une application ASP.NET Core 1.0 avec EF Core. Lorsque j'ai créé ma première application Core, j'ai remarqué qu'elle générait une classe ApplicationDbContextModelSnapshot utilisant un ModelBuilder pour générer le modèle.
Ensuite, j'ai lu que si je devais ajouter une table à la base de données, je devais créer le nouveau modèle et exécuter la ligne de commande pour générer le fichier de migration et mettre à jour la base de données. Ok, je le sais jusqu'à ce point.
Mais lorsque je le fais, je remarque que la classe ApplicationDbContextModelSnapshot est également mise à jour.
1) Cela signifie-t-il que je ne peux pas modifier cette classe ApplicationDbContextModelSnapshot car elle a l'air de se régénérer à chaque fois?
2) Devrais-je utiliser Data Annotations pour construire mon modèle ou utiliser API Fluent qui me dit de construire mon modèle dans la classe ApplicationDbContext? Hein? un autre fichier qui construit le modèle?
Je vois trois façons différentes de travailler avec la base de données ici, la classe d'instantané, les annotations de données et l'API fluide. Je suis confus, car aujourd’hui, j’ai commis une erreur dans mon dernier fichier de migration; j’ai donc supprimé le fichier, jeté la base de données et relancé la mise à jour de la base de données.
Mais en faisant cela, j'ai eu des erreurs similaires à:
The index 'IX_Transaction_GiftCardId' is dependent on column 'GiftCardId'.
ALTER TABLE ALTER COLUMN GiftCardId failed because one or more objects access this column.
Alors naturellement, je me demandais si je devais modifier la classe ApplicationDbContextModelSnapshot.
Quel est le chemin que je devrais prendre quand il s'agit de migrations ou de mises à jour de bases de données, car ces trois chemins me déroutent.
J'ai rencontré ce problème avant de créer des migrations, d'apporter des modifications au modèle, de créer de nouvelles migrations et d'essayer de mettre à jour la base de données. La cause principale est lorsque les clés sont modifiées et que les relations ne sont pas supprimées et ne sont pas ajoutées ou n'existent pas.
Vous avez deux options
Méthode simple La méthode la plus simple est également la méthode la plus destructrice et n'est possible que dans un environnement de développement.
Supprimez toutes les migrations, supprimez la base de données, créez de nouvelles migrations et exécutez «update-database».
Méthode dure / la plus sûre C'est la méthode la plus longue. Je recommande de le faire dans une branche d'intégration locale d'abord, en le poussant vers une intégration à distance, puis en production.
Ouvrez le fichier de migration, c'est-à-dire 20160914173357_MyNewMigration.cs. Supprimez tous les index dans l'ordre Supprimer / Ajouter / Modifier les schémas de table Ajoutez tous les index en arrière.
Pour l'une ou l'autre méthode, assurez-vous simplement de tester et de tester à nouveau.