2012-01-23 7 views
17

J'ai deux modèles d'entités de données au sein d'un projet MVC3 A et B.Impossible de trouver le type de modèle conceptuel

J'ai récemment ajouté le nouveau modèle de données d'entité B pour faire face à de nouvelles fonctionnalités, le problème est que maintenant le code existant a cessé de fonctionner et je reçois l'erreur suivante lorsque vous essayez d'accéder à code dans le modèle de l'entité A.

le message d'erreur est:

Could not find the conceptual model type 'project.models.Bclass'

Je ne comprends pas pourquoi il est cette nouvelle fonctionnalité a affecté le code actuel voyant que le modèle d'entité A n'a aucun changement. Et la fonctionnalité B est dans une classe distincte et n'interfère pas avec le modèle A.

Lorsque le nouveau code est supprimé du projet et que le modèle d'entité B est exclu, le code fonctionne comme il le devrait.

Voici quelques-unes des stacktrace de l'erreur:

Exception : Could not find the conceptual model type for 'Project1.Models.CrossSession'. 
Application Class - method : System.Data.Metadata.Edm.MetadataWorkspace -- GetEdmSpaceType 
User : temp.user 
Url : http://localhost/project1/auth/message 
Stacktrace : at System.Data.Metadata.Edm.MetadataWorkspace.GetEdmSpaceType(StructuralType objectSpaceType) 
    at System.Data.Entity.Internal.InternalContext.UpdateEntitySetMappings() 
    at System.Data.Entity.Internal.InternalContext.TryUpdateEntitySetMappingsForType(Type entityType) 
    at System.Data.Entity.Internal.InternalContext.GetEntitySetAndBaseTypeForType(Type entityType) 
    at System.Data.Entity.Internal.Linq.InternalSet`1.Initialize() 
    at System.Data.Entity.Internal.Linq.InternalSet`1.get_InternalContext() 
+0

après le code que vous avez ajouté ou expliquer ce que vous avez fait . – Nix

+0

Le code ajouté était un simple ajout dans la base de données en utilisant le framework d'entité et les classes associées. –

+0

Pouvez-vous simuler le code que vous avez ajouté? – Nix

Répondre

12

Solution trouvée. Il semble dans certains cas (aléatoirement) qu'il y ait un mélange dans le code généré par le entity framework. Ceci est apparemment un bug connu et une correction devrait venir dans les prochaines versions. Dans le même temps, la solution consiste à déplacer le efm dans une classe distincte au sein de la solution.

2

Eh bien, je viens d'installer EF 4.1 et j'ai essayé de combiner DbContext avec un EMDX - Quand j'ai essayé de repasser une vue j'ai eu la même erreur - c'est pourquoi je me suis retrouvé ici ... Je pense que séparer la fonctionnalité dans des assemblages séparés dans la solution ...

+1

Oui, POCO et edmx ne pas mélanger http://social.msdn.microsoft.com/Forums/is/adonetefx/thread/4d9846a0-f890-41df-9444-cf2b4d2bd710 – dtanders

0

En utilisant Visual Studio 12, le problème n'a toujours pas été résolu. Comme solution alternative, j'ai mis en place le second modèle de données SQL en utilisant des classes de données «démodées» qui existaient avant les modèles d'entité - elles sont toujours là et elles fonctionnent toujours. Utilisez Ajouter - Nouvel élément - (Catégorie de données) - LINQ To SQL Classes, ouvrez le ServerExplorer, localisez le serveur et la base de données, puis faites-le glisser et déposez-le dans le volet des classes de données. Old school - mais surmonte commodément ce problème très gênant lorsque la fonctionnalité complète des modèles d'entité n'est pas nécessaire.

8

Résolu cela en mettant à jour EntityFramework à la dernière version (6.0) http://nuget.org/packages/EntityFramework/.

Après l'avoir installé les modèles régénèrent et il fonctionnera;)

+0

J'ai installé l'Entity Framework 6.0.1 et j'ai toujours le même problème. – wonea

0

J'ai enlevé les modèles EDMX, enlevé le paquet entité, réinstaller l'entité 5.0 et fonctionne.

7

Une explication possible est que si vous utilisez la première approche de la base de données et oubliez d'ajouter les classes Entity, vous obtiendrez cette erreur.

dire (du guide lié ci-dessous)

  1. Faites un clic droit sur la surface du concepteur du modèle.
  2. Dans le menu contextuel, choisissez Ajouter un élément de génération de code.
  3. Dans la boîte de dialogue Ajouter un nouvel élément qui s'ouvre, sélectionnez Données dans la liste des types de modèles installés sur la gauche.
  4. Choisissez le générateur ADo.NET DbContext, puis cliquez sur le bouton Ajouter .

J'utilise normalement le guide de Julie Lerman; https://msdn.microsoft.com/en-us/library/jj206878(v=vs.113).aspx

+0

Je pense qu'il ajoute automatiquement l'élément de génération de code (fichier .tt) pour vous lorsque vous passez par la boîte de dialogue Ajouter un nouvel élément et choisissez le modèle de données entité ADO.NET. – Zack

8

J'ai eu le même problème avec 2 différents fichiers .edmx dans le même projet. Pour la première .edmx model j'avais utilisé "Add Code Generation Item", pour le deuxième modèle que je n'avais pas. Le projet se construisait correctement mais rejetait cette exception lors de l'exécution.

J'ai résolu générant les classes .tt pour le deuxième .edmx model ainsi.

1

Cela peut aussi être résolu en générant le nouveau edmx en studio visuel 2010 de sorte qu'il corresponde aux plus anciens ... (et la copie sur les fichiers qu'il génère)

Questions connexes