100 votes

Pourquoi est-ce que je reçois cette erreur : Aucun mappage spécifié pour l'EntitySet/AssociationSet suivant - Entity1 ?

Je suis en train d'utiliser Entity Framework 4 avec l'approche Model First.

J'ai commencé le projet, dessiné les entités et généré la base de données. Tout fonctionnait bien.

Ensuite, j'ai eu besoin de revenir en arrière et d'ajouter une autre entité à mon modèle. Cependant, lorsque je fais glisser une entité vers le EDMX, j'ai cette erreur :

entrer la description de l'image ici

D'accord! Il me suffit de mapper Entity1 à une table.. Mais hey! J'utilise l'approche Model First, je m'attends à ce qu'il crée la table pour moi lorsque je génère la DDL.

Comment puis-je contourner cette erreur?

1 votes

Ainsi, pouvez-vous générer un script de base de données à partir de votre modèle ?

150voto

André Pena Points 6989

Cela est dû à la façon dont EF4 fonctionne avec le model-first.

Lorsque vous créez un modèle model-first pour la première fois, il se trouve dans un état où le SSDL n'existe pas. Vous pouvez faire glisser des entités, les associer, etc. et pourtant, si vous regardez le SSDL sur le fichier EDMX, vous verrez que aucune des entités n'a une table de stockage associée dans le SSDL.

Cela change lorsque vous cliquez sur l'élément de menu contextuel Générer la base de données à partir du modèle. La partie confuse est que cette action fait plus que simplement générer un script DDL. En fait, elle modifie le fichier EDMX pour inclure des informations SSDL. À partir de ce moment, le fichier EDMX entrera dans un état dans lequel chaque entité dans le concepteur/CSDL doit être associée à une entité dans le SSDL. Si elle ne correspond pas, cela déclenchera une erreur de compilation :

Aucune correspondance spécifiée pour les EntitySet/AssociationSet suivants - (NomEntity)

Un autre fait intéressant est que ce n'est pas le genre d'erreur qui empêchera la compilation. En effet, elle générera la bibliothèque de classes de sortie. Ne devrait-elle pas être un avertissement ou quelque chose du genre ?

Pour éviter cette erreur, il vous suffit de Générer la base de données à partir du modèle à nouveau après avoir inséré une nouvelle entité. Cela mettra à jour le SSDL et corrigera les correspondances.

MODIFIER

Si vous n'utilisez pas le model-first et que vous "mettez à jour à partir de la base de données", vous aurez également cette erreur si vous avez supprimé une table dans le serveur de base de données. Cela est dû au fait qu'Entity Framework ne supprimera pas automatiquement l'entité pour vous. Supprimez l'entité manuellement et l'erreur disparaîtra.

1 votes

J'ai rencontré le même problème après avoir mis à jour mon modèle par rapport aux changements de la base de données (ce qui n'est peut-être pas bon, car mon approche n'est pas axée sur le modèle en premier).

5 votes

@balanza, lorsque vous n'utilisez pas le modèle en premier et que vous mettez à jour votre modèle en fonction de la base de données, vous obtiendrez cette erreur lorsque vous supprimez une table du serveur car le concepteur EF ne supprimera PAS automatiquement l'entité. Lorsque vous supprimez manuellement le type d'entité, l'erreur disparaîtra

0 votes

J'ai changé les miennes directement dans le fichier xml du modèle de données de l'entité. J'avais beaucoup de tables et de fonctions et il y avait un risque de désaccord, donc je l'ai fait manuellement.

36voto

Mal Points 121

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.

14 votes

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.

0 votes

Cela m'a aidé. J'ai dû créer une relation de 1..* de mon entité d'origine vers mon entité de navigation.

23voto

Azeem ahmad Points 481

Erreur 3027 : Aucune correspondance spécifiée pour l'EntitySet/AssociationSet suivant..." - Maux de tête avec Entity Framework

Si vous développez un modèle avec Entity Framework, vous pouvez rencontrer cette erreur gênante de temps en temps :

Erreur 3027 : Aucune correspondance spécifiée pour l'EntitySet/AssociationSet suivant [Nom de l'entité ou de l'association]

Cela peut sembler illogique lorsque tout semble correct dans le EDM, mais c'est parce que cette erreur n'a généralement rien à voir avec le EDM. Ce qu'elle devrait dire, c'est "régénérez vos fichiers de base de données".

En effet, Entity Framework vérifie le SSDL et le MSL lors de la construction, donc si vous avez simplement modifié votre EDM mais que vous n'utilisez pas Générer le modèle de base de données..., il se plaint qu'il manque des éléments dans vos scripts SQL.

En bref, la solution est la suivante : "N'oubliez pas de Générer le modèle de base de données à chaque fois que vous mettez à jour votre EDM si vous faites du développement basé sur le modèle. J'espère que votre problème est résolu".

0 votes

Cela a fonctionné pour cette même erreur en faisant le modèle de base de données générer a aidé à effacer l'exception.

7voto

batpox Points 13

J'ai rencontré la même erreur, mais je n'utilisais pas le modèle-first. Il s'est avéré que d'une manière ou d'une autre, mon fichier EDMX contenait une référence à une table même s'il n'apparaissait pas dans le concepteur. Curieusement, lorsque j'ai effectué une recherche de texte pour le nom de la table dans Visual Studio (2013), la table n'était pas trouvée.

Pour résoudre le problème, j'ai utilisé un éditeur externe (Notepad++) pour trouver la référence à la table offensante dans le fichier EDMX, puis (soigneusement) supprimé toutes les références à la table. Je suis désolé de dire que je ne sais pas comment le fichier EDMX en est arrivé à cet état en premier lieu.

7voto

Graham Laight Points 321

Dans mon cas, un autre développeur avait supprimé certaines des tables de la base de données sous-jacente. Quand je m'en suis rendu compte et que j'ai supprimé ces tables de l'entité, le problème a été résolu. Ce n'était pas aussi évident que ça en a l'air.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X