J'utilise Entity Framework 4 avec l'approche Model First.
J'ai démarré le projet, conçu les entités et généré la base de données. Tout a bien fonctionné.
Ensuite, j'ai dû revenir en arrière et ajouter une autre entité à mon modèle. Cependant, lorsque je fais glisser une entité vers l'EDMX, j'obtiens cette erreur:
Bien! J'ai juste besoin de mapper Entity1 à une table .. Mais bon! J'utilise l'approche Model First, je m'attends à ce qu'il crée la table pour moi lorsque je génère le DDL.
Comment contourner cette erreur?
.net
entity-framework
entity-framework-4
André Pena
la source
la source
Réponses:
Cela est dû à la façon dont EF4 fonctionne avec le modèle d'abord.
Lorsque vous créez pour la première fois un modèle basé sur le modèle, il est dans un état où le SSDL n'existe pas. Vous pouvez faire glisser des entités, les associer et ainsi de suite et pourtant, si vous regardez le SSDL sur le fichier EDMX, vous verrez qu'aucune des entités n'a de table de stockage associée dans le SSDL.
Cela change lorsque vous cliquez sur l'
Generate Database From Model
élément de menu contextuel. La partie déroutante est que cette action fait plus que simplement générer un script DDL. En fait, il modifie le fichier EDMX pour inclure des informations SSDL. À partir de ce moment, le fichier EDMX entrera dans un état dans lequel chaque entité du concepteur / CSDL doit être mappée à une entité du SSDL. Si l'on ne mappe pas, cela déclenchera une erreur de compilation:Un autre fait intéressant est que ce n'est pas le genre d'erreur qui empêchera la compilation. Il générera en effet la bibliothèque de classes de sortie. Cela ne devrait-il pas être un avertissement ou quelque chose?
Pour éviter cette erreur, tout ce que vous avez à faire après l'insertion d'une nouvelle entité est de
Generate Database From Model
recommencer. Cela mettra à jour le SSDL et corrigera les mappages.ÉDITER
Si vous n'utilisez pas le modèle d'abord et que vous «mettez à jour à partir de la base de données», vous aurez également cette erreur dans le cas où vous avez supprimé une table dans DB Server. En effet, Entity Framework ne supprimera pas automatiquement l'entité pour vous. Supprimez l'entité manuellement et l'erreur disparaîtra.
la source
J'ai constaté que j'obtenais la même erreur car j'avais oublié de créer une contrainte référentielle après avoir créé une association entre deux entités.
la source
Si vous développez un modèle avec Entities Framework, vous pouvez parfois rencontrer cette erreur ennuyeuse:
Cela peut ne pas avoir de sens lorsque tout va bien sur l'EDM, mais c'est parce que cette erreur n'a généralement rien à voir avec l'EDM. Ce qu'il devrait dire, c'est "régénérer vos fichiers de base de données".
Vous voyez, Entities vérifie le SSDL et MSL pendant la construction, donc si vous venez de changer votre EDM mais n'utilisez pas Generate Database Model ... alors il se plaint qu'il manque des éléments dans vos scripts sql.
Donc, en bref, la solution est: "N'oubliez pas de générer un modèle de base de données à chaque fois que vous avez mis à jour votre EDM si vous faites le développement du premier modèle. J'espère que votre problème est résolu".
la source
Dans mon cas, un autre développeur avait supprimé certaines des tables de la base de données sous-jacente. Lorsque j'ai réalisé cela et supprimé ces tables de l'entité, le problème a été résolu. Ce n'était pas aussi évident qu'il y paraît.
la source
J'ai rencontré la même erreur, mais je n'utilisais pas le modèle d'abord. Il s'est avéré qu'en quelque sorte mon fichier EDMX contenait une référence à une table même si elle n'apparaissait pas dans le concepteur. Fait intéressant, lorsque j'ai effectué une recherche de texte pour le nom de la table dans Visual Studio (2013), la table n'a pas été trouvée.
Pour résoudre le problème, j'ai utilisé un éditeur externe (Notepad ++) pour trouver la référence à la table incriminée dans le fichier EDMX, puis j'ai supprimé (soigneusement) toutes les références à la table. Je suis désolé de dire que je ne sais pas comment le fichier EDMX est entré dans cet état en premier lieu.
la source
J'ai eu un changement de table et il a créé une autre entité avec un numéro 1 à la fin (comme
MyEntity1
et aMyEntity
) comme confirmé par le navigateur de modèle edmx. Quelque chose au sujet des deux entités ensemble a confondu le traitement.La suppression de la table et sa réajout l'ont corrigée.
Notez que si TFS est connecté, effectuez un check-in de l'edmx après la suppression. Alors et alors seulement, obtenez la dernière version et ajoutez-la de nouveau dans un processus défini en deux étapes. Sinon, TFS est confondu avec la suppression et la réajout de la ou des mêmes entités nommées, ce qui semble poser des problèmes.
la source
Un moyen plus rapide pour moi était de supprimer les tables et de les rajouter. Il les a automatiquement mappés. :)
la source
Pour ceux qui utilisent l'
Database First
approche, tout ce que vous avez à faire après avoir inséré une nouvelle entité est de faire àGenerate Database From Model
nouveau un clic droit sur votre.edmx
fichier et de sélectionnerGenerate Database From Model...
la source
Eu cette erreur lorsque j'avais supprimé une table de la base de données. Résolu le problème en cliquant avec le bouton droit sur le diagramme EDMX, en accédant à Propriétés, en sélectionnant le tableau dans la liste de la fenêtre Propriétés et en le supprimant (en utilisant la touche Suppr) du diagramme.
la source
Search within file content
etSearch External Files
supprimer toutes les lignes de codes référençant l'entité manquante. Ils ressembleront à ceci:
Cette erreur est commune aux tables supprimées de la base de données.
Lorsque l'on supprime une table dans la base de données, ou que l'on change simplement la
web.config.connectionStrings
base de données EF mappée, pointer vers une nouvelle table et non celle utilisée pour générer les mappages d'origine est le problème.C'est cette nouvelle base de données que ces entités avec l'erreur 3027 ne sont pas présentes.
la source
J'ai eu l'erreur lorsque j'essayais de créer un résultat personnalisé pour une procédure stockée et j'ai supposé qu'il devait s'agir d'une entité.
La solution était que je viens de créer un type complexe dans le navigateur de modèle et que je l'ai affecté en conséquence aux "Importations de fonctions d'édition".
Je vais l'ajouter ici car il semble que cette question soit où google vous emmène lorsque vous obtenez cette erreur.
la source
J'avais tout réglé correctement (cardinalités et propriétés dépendantes) mais je ne pouvais pas comprendre pourquoi je continuais à recevoir des erreurs. Finalement compris que, EF a généré une colonne dans la table dépendante seule (table_tablecolumn) et qu'elle n'a aucune relation avec la table, donc aucun mappage n'a été spécifié. J'ai dû supprimer la colonne dans le fichier EDMX et reconstruire la solution qui a résolu le problème. J'utilise l'approche DB.
la source
Mettre à jour le modèle à partir de la base de données ne fonctionne pas pour moi.
J'ai dû supprimer l'entité en conflit, puis exécuter le modèle de mise à jour de la base de données, puis reconstruire la solution. Après cela, tout fonctionne bien.
la source
Partager ceci pour d'autres personnes. Dans mon cas, nous travaillions sur une solution MVC partagée et en utilisant un module commun pour les tables que nous utilisons pour les listes déroulantes. J'ai eu l'erreur lorsque j'ai mis à jour le modèle Entity en ajoutant une nouvelle table. Il s'avère que lorsque j'ai mis à jour l'EDMX, il a probablement mis à jour mes droits d'accès sur la base de données, ce qui a entraîné de ne pas avoir accès à cette certaine table me donnant
no mapping specified
.Le simple fait d'ajouter et de donner accès à mon utilisateur a résolu le problème.
la source
Je pense que j'ai obtenu cela en ne supprimant pas explicitement certaines tables de l'edmx avant de les renommer et de les rajouter. Au lieu de cela, j'ai simplement renommé les tables, puis j'ai fait une mise à jour du modèle à partir de la base de données, pensant que cela les verrait disparaître et les supprimerait du modèle. J'ai ensuite fait un autre modèle de mise à jour à partir de la base de données et ajouté les tables renommées.
Le site fonctionnait avec les nouvelles tables, mais j'ai eu l'erreur. Finalement, j'ai remarqué que les tables d'origine étaient toujours dans le modèle. Je les ai supprimés du modèle (cliquez dessus dans l'écran edmx, touche de suppression), puis l'erreur a disparu.
la source