Question

Je l'ai rencontré une exception lors de l'utilisation Entity Framework 4.0 RC. Mon modèle Entity Framework est encapsulé dans une assemblée privée dont le nom est Procurement.EFDataProvider et mes classes POCO sont à l'intérieur d'un autre ensemble Procurement.Core La relation entre le noyau (logique métier) et EFDataProvider (Data Access) est une usine nommée DataProvider

quand je tente de créer une ObjectSet

objectSet = ObjectContext.CreateObjectSet<TEntity>();

Je reçois une erreur:

  

l'information cartographique et les métadonnées ne peuvent pas être trouvées pour EntityType 'Procurement.Core.Entities.OrganizationChart'.

Était-ce utile?

La solution

Pour toute personne traitant d'autre avec l'erreur, je pense qu'il est utile de mentionner certains scénarios que j'ai trouvé que l'origine de ce (très inutile) erreur:

  • Propriétés Misspelled (sensibles à la casse!)
  • Propriétés manquantes dans la classe POCO
  • mésappariements de type entre le type d'entité POCO et (par exemple, int au lieu de long)
  • énumérations dans le POCO (EF ne supporte pas les énumérations en ce moment que je comprends)

Il pourrait y avoir d'autres causes.

HTH

Autres conseils

Ceci est probablement parce que EF ne peut pas trouver les informations de cartographie intégrée. vous aurez probablement à l'intérieur de votre chaîne de connexion avez quelque chose comme son:

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

Ce * est un caractère générique, indiquant le contexte de l'objet pour essayer de trouver les informations de cartographie intégrée à partir, je pense, l'analyse de tous les ensembles chargés. Si l'ensemble n'est pas chargé, EF ne le trouvera pas.

Ce que vous devez faire est de fournir la chaîne de connexion avec plus d'informations sur l'endroit où vos informations de cartographie est intégrée. Modifiez le * au nom de l'assemblage spécifique de votre code de mappage:

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

Si cela échoue, trouver l'Assemblée et le charger directement dans votre ObjectContext en utilisant:

ObjectContext.Metadataworkspace.LoadFromAssembly();

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

Voir aussi le commentaire de JRoppert EF4 POCO (ne pas utiliser T4): (merci! JRoppert) cartographie et des informations de métadonnées ne peuvent pas être trouvées pour EntityType

Je recevais cette erreur parce que j'avais plus de fichier edmx dans le même ensemble avec une utilisation correcte sur les espaces de noms personnalisés.

Voici ce qui est dit à propos de l'exception dans System.Data.Objects.ObjectContext

// Exceptions:

    //   System.InvalidOperationException:
    //     When the System.Data.Metadata.Edm.EntitySet from entitySetName
    //     does not match the System.Data.Metadata.Edm.EntitySet of the object’s
    //     System.Data.EntityKey.
    // -or-
    //     When the System.Data.Objects.ObjectContext.DefaultContainerName
    //     property is not set on the System.Data.Objects.ObjectContext and 
    //     the name is not qualified as part of the entitySetName parameter.
    // -or-
    //     When the specified type belongs to more than one entity set.

Je l'ai vu aussi quand la chaîne de connexion n'est pas spécifié dans le fichier de configuration.

Une autre question possible est, si vous utilisez-premier code et votre type d'entité est définie dans un ensemble séparé où le contexte est de définir et vous n'avez pas ajouté des applications personnalisées à la méthode OnModelCreating(DbModelBuild modelBuilder), alors EF semble ignorer les annotations de données.

Solution:

Ajouter modelBuilder.Entity<YourEntityType>(); à la méthode OnModelCreating(DbModelBuild modelBuilder).

après connexes.

Vérifier l'orthographe juste de propriété avec le modèle

Il pourrait y avoir une autre raison. J'ai aussi tiré mes cheveux pour une nuit.

Je me suis tourné qu'il ya un certain désordre dans les références dans la solution. Dans mon projet, le edmx fait partie d'un projet appelé DataAccess.Dll. Mais je n'ai aucune référence à partir de mon exe. De mon exe j'ai une référence à un autre projet appelé Business.Dll, et ce projet a une référence et ancien emplacement du DataAccess.DLL.

Faites le test suivant pour voir si vous avez un tel problème:

  1. Ouvrez le directeur bin de votre projet exe et le garder visible.
  2. Construire la solution.
  3. Le premier projet qui sera construit est le projet d'accès aux données, et vous pouvez voir dans le dossier bin l'heure actuelle comme date de modification.
  4. Alors que d'autres projets sont construits, vous verrez que la date de modification du projet DataAccess a été remplacé par un ancien.

Vous devez vérifier vos références et d'assurer qu'ils se réfèrent aux emplacements de mise à jour de vos dll.

Dans mon cas, il était essentialy la même question, la mise en correspondance de ne pas être exactement comme prévu. Ce qui me était que je devais passer une propriété dans une « table par hiérarchie héritage » de l'une des sous-classes à la classe de base et oublié de mettre à jour le modèle.

Je coutume POCO et en copiant le fichier edmx à un nouveau projet vide et laisser AutoGenerate les entités, puis les comparer à ce que je me l'avais aidé à trouver la différence.

une erreur noob, mais j'avais l'erreur lors de mon accès à la DB était avec un nom d'utilisateur en lecture seule et mot de passe. L'espoir que mes erreurs d'aider les autres.

J'ai eu un problème similaire. J'avais déjà un fichier EDMX pour une base de données en utilisant des classes POCO et un objet de contexte, je me suis écrit. Quand j'ai ajouté une deuxième EDMX pour une autre base de données je le modèle POCO T4 et ne EDMX travaillé et jeté l'erreur que vous avez mentionné. Pour le résoudre, je mis au rebut mon habitude POCO et contexte et utilisé uniquement le modèle T4 et tout a bien fonctionné à nouveau.

J'ai eu un problème où je l'avais ajouté quelques colonnes à une table.

Dans le tableau Mappages, j'avais rebaptisé les noms de colonnes.

Bien que je courais « Transform » Tous les modèles et reconstruit l'application, j'ai encore le « Le type de métadonnées associées pour le type <> contient les propriétés suivantes inconnues ou des champs <> » erreur.

La classe pour cette table Domain.Poco.tt était correcte, mais je trouve le fichier class.Metadata.cs correspondant à Domain.Poco.MetaData.tt n'a pas mis à jour, et avait les nouvelles colonnes avec les noms originaux - pas les nouvelles que j'avais indiqué dans le tableau Mapping.

Solution? Je viens de supprimer la classe de métadonnées incriminée, et re-RAN « Transformer Tous les modèles » et il a été recréée correctement, avec les noms de colonnes correcte / fonction.

Mon problème est que j'avais modifié le modèle T4 pour exclure le champ de réplication nommé « msrepl_tran_version ». Cela a provoqué la base de données pour ne pas les classes générées qui peut être la cause de ce message d'erreur. Assurez-vous que votre base de données et les classes correspondance.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top