Pourquoi est-ce que j'obtiens cette erreur: Aucun mappage spécifié pour le EntitySet / AssociationSet - Entity1 suivant?

96

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:

entrez la description de l'image ici

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?

André Pena
la source
1
Alors, peut générer un script de base de données à partir de votre modèle?
Ladislav Mrnka le

Réponses:

147

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:

Aucun mappage spécifié pour le EntitySet / AssociationSet suivant - (EntityName)

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

André Pena
la source
1
J'ai eu le même problème après la mise à jour de mon modèle contre les changements de bd (cela ne pouvait pas être bon, car mon approche n'est pas le modèle d'abord).
balanza
5
@balanza, lorsque vous n'utilisez pas le modèle d'abord et que vous mettez à jour votre modèle en fonction de la base de données, vous obtiendrez cette erreur lorsque vous supprimerez une table dans le serveur car le concepteur EF ne supprimera PAS l'entité automatiquement. Lorsque vous supprimez manuellement le type d'entité, l'erreur disparaîtra
André Pena
J'ai changé le mien directement dans le fichier xml du modèle de données d'entité. J'avais des tas de tables et de fonctions et il y avait un risque de discordance donc je l'ai fait manuellement.
Bat_Programmer
C'est SUPER utile. De plus, si vous utilisez d'abord le modèle et «mise à jour à partir de la base de données» et obtenez de nouvelles tables, vous aurez également l'erreur. Mais exécuter Generate Database from Model (pas besoin d'exécuter réellement le script généré - cela tuera vos données!) Résoudra les problèmes de mappage dans votre code et vous n'aurez aucun problème à l'utiliser à l'avenir.
Brian Warshaw du
1
Comment géreriez-vous la mise à jour du schéma pour la base de données SQL Server CE déjà déployée? Peut déplacer cela vers une question distincte, s'il s'agit d'une procédure totalement indépendante
FYK
35

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.

Mal
la source
13
FYI: Vérifiez les propriétés de l'association, et en bas "Contrainte référentielle" sera vide. Cliquez sur les points de suspension et créez une contrainte.
Patrice Calvé
Cela m'a aidé. J'ai dû créer une relation 1 .. * entre mon entité d'origine et mon entité de navigation.
duyn9uyen
21

Erreur 3027: Aucun mappage spécifié pour le EntitySet / AssociationSet suivant ... "- Maux de tête Entity Framework

Si vous développez un modèle avec Entities Framework, vous pouvez parfois rencontrer cette erreur ennuyeuse:

Erreur 3027: aucun mappage spécifié pour le EntitySet / AssociationSet [nom d'entité ou d'association] suivant

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

Azeem ahmad
la source
Cela a fonctionné pour cette même erreur en faisant le Generate Database Model a aidé à effacer l'exception
kolexinfos
7

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.

Graham Laight
la source
6

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.

batpox
la source
5

J'ai eu un changement de table et il a créé une autre entité avec un numéro 1 à la fin (comme MyEntity1et a MyEntity) 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.

ΩmegaMan
la source
J'ai eu le même problème après un changement de table. J'ai trouvé les mêmes entités avec un numéro 1 et 2 (MyEntity1, MyEntity2) à plusieurs endroits sous le modèle. J'ai regardé dans chaque branche (diagrammes, types d'entités, etc.) et supprimé chaque instance de MyEntity et MyEntity [n]. Pour faire bonne mesure, j'ai fait une «solution propre», puis mis à jour à partir de la base de données pour ne rajouter que MyEntity.
MsTapp
4

Un moyen plus rapide pour moi était de supprimer les tables et de les rajouter. Il les a automatiquement mappés. :)

Atul K.
la source
2

Pour ceux qui utilisent l' Database Firstapproche, tout ce que vous avez à faire après avoir inséré une nouvelle entité est de faire à Generate Database From Modelnouveau un clic droit sur votre .edmxfichier et de sélectionnerGenerate Database From Model...

Masoud Darvishian
la source
0

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.

l'amour en direct
la source
0
  1. Accédez à l'Explorateur de solutions, cliquez sur le bouton Rechercher
  2. Laissez coché à la fois Search within file contentetSearch External Files
  3. Tapez le nom des entités que votre mappage ne reconnaît pas.
  4. Supprimez tous les fichiers LIÉS au problème. Ceux-ci seront probablement nommés d'après la même entité manquante. NE supprimez AUCUN fichier portant le nom de votre classe de contexte sur le fichier, surtout si leurs extensions sont .cs ou .tt. Dans le fichier .cs de contexte .
  5. supprimer toutes les lignes de codes référençant l'entité manquante. Ils ressembleront à ceci:

    public virtual DbSet< Entity1> Entity1 { get; set; }

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

MarcoSantana
la source
0

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.

Thomas Koelle
la source
0

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.

user2965957
la source
0

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.

Willy David Jr
la source
0

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.

AdorableVB
la source
0

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.

apswrk
la source