J'ai ajouté une nouvelle colonne à une table de ma base de données. La table est déjà définie dans le modèle Entity Framework existant. J'ai parcouru la plupart des questions sur la façon de procéder, mais cela échoue toujours.
Un peu d’arrière-plan, ce modèle d’entité n’a pas été mis à jour depuis au moins 3 ans. Donc, mis à part la colonne que j'ajoute, je sais qu'un certain nombre d'autres colonnes ont été ajoutées à cette époque, mais n'ont jamais été incluses. J'ai repris le projet il y a environ 9 mois et je n'ai jamais réussi à mettre à jour le modèle.
Premier essai:
Résultat:
Deuxième essai
Résultat
Troisième tentative
Résultat
Quatrième tentative
Résultats
Dernière tentative
Résultat
Toute aide ou direction qui pourrait être fournie serait grandement appréciée car je suis à un point critique et je dois mettre le modèle à jour.
Le "modèle de mise à jour à partir de la base de données" est difficile/lent à utiliser et est sujet aux erreurs. Cela génère d'autres choses que vous ne voulez probablement pas/dont vous n'avez pas besoin. Donc, ajouter manuellement la colonne dont vous avez besoin fonctionnera mieux. Je vous suggère de le faire en dehors de l'éditeur VS car, selon le nombre de modèles/tables, l'ouverture du fichier peut être très lente.
1. So in Windows Exlorer,right click on the *.edmx file and open with Notepad (or Notepad++/Textpad).
2. Search for the text <EntityType Name="YourTableNameToAddColumn">.
3. Add the property <Property Name="YourNewColumnName" Type="varchar" MaxLength="64" />
4. Search for the text <MappingFragment StoreEntitySet="YourTableNameToAddColumn">
5. Add mapping to the new column <ScalarProperty Name="YourNewColumnName" ColumnName="YourNewColumnName"/>
6. Save the *.edmx file
Un addendum à la réponse de alltej ci-dessus et à la réponse de Chris Walsh indiquant qu'il reçoit "Le côté conceptuel membre ou propriété" xxxxx "spécifié dans le cadre de ce MSL n'existe pas dans MetadataWorkspace.
Vous devez vous assurer que vous recherchez 'Ajouter la propriété' dansDEUXendroits dans votre fichier .edmx, sinon vous obtiendrez l'erreur de Chris
1.Alors dans Windows Exlorer, faites un clic droit sur le fichier * .edmx et ouvrez-le avec Notepad (ou Notepad ++/Textpad).
2.Rechercher le texte <EntityType Name="YourTableNameToAddColumn">
.
3.Ajouter la propriété <Property Name="YourNewColumnName" Type="varchar" MaxLength="64" />
.
4.Recherchez à nouveau le texte <EntityType Name="YourTableNameToAddColumn">
, il y en a un deuxième.
5.Ajouter la propriété <Property Name="YourNewColumnName" Type="varchar" MaxLength="64" />
à elle.
6.Rechercher le texte <MappingFragment StoreEntitySet="YourTableNameToAddColumn">
.
7.Ajoutez un mappage à la nouvelle colonne <ScalarProperty Name="YourNewColumnName" ColumnName="YourNewColumnName"/>
.
8.Enregistrez le fichier * .edmx
9. Ensuite, mettez à jour le modèle edmx de votre table public string YourNewColumnName { get; set; }
Compris le problème. Lorsque j'ai généré le modèle, l'erreur 113: la multiplicité n'est pas valide dans le rôle. Je ne l'ai pas remarqué parmi les autres erreurs 16307 générées lorsque la création a échoué. Une fois que j'ai résolu que tout fonctionnait bien.
Merci
ATTENTION: Si vous ne pouvez pas supprimer votre base de données, NE PAS suivre ces étapes!
J'utilise Visual Code (.net 2) . Voici comment je l'ai résolu:
Tout d'abord, supprimez votre base de données:
dotnet ef database drop
Ensuite, supprimez toutes les migrations:
dotnet ef migrations remove
Exécutez la même commande jusqu'à tous les migrations sont supprimées!
Ajoutez votre première migration:
dotnet ef migrations add InitialCreate
Après avoir exécuté la commande ci-dessus, assurez-vous d’apporter les modifications au nouveau fichier généré, probablement dans le fichier Data/Migrations: horodatage + InitialCreate _ pas le fichier de conception}.
Exemple d'image: Ajout d'une nouvelle colonne
Après avoir ajouté vos colonnes et que tout soit cohérent, enregistrez le projet et exécutez la commande suivante:
dotnet ef database update
Si tout va bien, votre nouvelle colonne sera créée.