38 votes

Les informations de mappage et de métadonnées EF n'ont pas pu être trouvées pour EntityType Error

J'ai rencontré une exception lorsque j'utilise Entity Framework 4.0 RC. Mon modèle Entity Framework est encapsulé dans une assembly privée dont le nom est Procurement.EFDataProvider et mes classes POCO sont dans une autre assembly Procurement.Core. La relation entre Core(Business Logic)et EFDataProvider(Data Access) se fait avec une factory nommée DataProvider.

donc quand j'essaie de créer un ensemble d'objets

objectSet = ObjectContext.CreateObjectSet<TEntity>();

Je reçois une erreur :

Les informations de mappage et de métadonnées n'ont pas pu être trouvées pour l'EntityType 'Procurement.Core.Entities.OrganizationChart'.

62voto

joniba Points 1010

Pour tous ceux qui sont confrontés à cette erreur, je pense qu'il est utile de mentionner certains scénarios que j'ai trouvés et qui provoquent cette erreur (extrêmement inutile) :

  • Propriétés mal orthographiées (sensible à la casse !)
  • Propriétés manquantes dans la classe POCO
  • Correspondance de type entre le POCO et le type d'entité (par exemple, int au lieu de long).
  • Enums dans le POCO (EF ne supporte pas les enums pour le moment si je comprends bien)

Il peut y avoir d'autres causes également.

HTH

12voto

jfar Points 19380

C'est probablement parce que EF ne trouve pas les informations de mappage intégrées. Dans votre chaîne de connexion, vous aurez probablement quelque chose comme ceci :

metadata=res://*/Models.MyModels.csdl|...etc

L'astérisque (*) est un caractère de remplacement, qui indique au contexte de l'objet d'essayer de trouver les informations de mappage intégrées en analysant, je pense, tous les assemblages chargés. Si l'assemblage n'est pas chargé, EF ne le trouvera pas.

Ce que vous devez faire, c'est fournir à la chaîne de connexion plus d'informations sur l'endroit où vos informations cartographiques sont intégrées. Remplacez le * par le nom d'assemblage spécifique de votre code de mappage :

metadata=res://Procurement.EFDataProvider/Models.MyModels.csdl

Si cela échoue, trouvez l'Assemblée et chargez-la directement dans votre ObjectContext en utilisant :

ObjectContext.Metadataworkspace.LoadFromAssembly();

3voto

Roy de Boer Points 21

Ce n'est pas directement lié à ce qui précède, mais si vous obtenez ce message d'erreur et que vous avez mélangé un modèle POCO et un modèle ordinaire : mauvaise idée !

Voir également le commentaire de JRoppert à l'adresse suivante EF4 POCO (n'utilisant pas T4) : Les informations de mappage et de métadonnées n'ont pas pu être trouvées pour EntityType. (merci JRoppert !)

2voto

Anish Points 715

Je l'ai également constaté lorsque la chaîne de connexion n'est pas spécifiée dans le fichier de configuration.

1voto

soumitra ghosh Points 11

Il suffit de vérifier l'orthographe de la propriété avec le modèle

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