Erreur d'échafaudage du contrôleur d'ajout de MVC3 - Type de contexte non pris en charge
Je suis en création d'une nouvelle application MVC 3.
Mesures prises:
1. Ajouté nouveau modèle en cliquant sur les Modèles et l'ajout de "Classes LINQ to SQL"
2. Traîné des tables à partir de l'Explorateur de serveurs pour mon nouveau dbml mise en page et enregistré
3. Droit-cliquez sur Contrôleurs->Add->Contrôleur
4. Entrez les informations suivantes:
Nom du contrôleur: UserController
Modèle: Contrôleur de lire/écrire les actions et les points de vue, à l'aide de Entity Framework
Classe de modèle: aspnet_User (TierPay)
Classe De Contexte De Données: AgricultureDataContext (TierPay)
Vues: de Rasoir (VBHTML)
5.Cliquez Sur Ajouter
6.Obtenez l'erreur suivante:
Non pris en charge type de contexte.
J'ai Googlé autour et n'ai pas trouvé de réponses.
Merci!
source d'informationauteur fhilton | 2012-02-02
Vous devez vous connecter pour publier un commentaire.
J'ai été faire cette erreur lors du travail avec le Modèle de Données d'Entité au lieu de Linq to SQL. J'avais créé le modèle à partir d'une base de données SQL Server. Le problème a été causé par la sélection d'un mauvais Contexte de Données de Classe dans l'Ajout de Contrôleur de dialogue. Que les valeurs que doit être la classe de haut niveau, dans mon cas, l'une avec des "Entités" dans le nom. J'espère que cette aide.
Cette boîte de dialogue est déroutant au premier abord, lors de l'utilisation d'Entity Framework de Base de données la première option.
Si vous utilisez DB d'abord, puis à la fois le "modèle de classe" liste déroulante et la "classe de contexte de données" liste déroulante s'affiche à la même classe des noms.
Si vous êtes, par exemple, de tenter de créer un contrôleur lié à un modèle de type "Utilisateur" permet de dire que vous allez voir "Utilisateur" à la fois dans le modèle dans la liste déroulante ainsi que dans le "Contexte" de la boîte de dialogue.
Dans le "modèle de classe" de la boîte de dialogue que vous souhaitez sélectionner votre modèle Utilisateur (dans notre exemple ici).
Dans la "classe de Contexte de Données" de la boîte de dialogue vous ne voulez pas également sélectionner "Utilisateur". Au lieu de cela, vous voulez choisir la classe qui se trouve dans votre fichier EDMX qui hérite de ObjectContext. Il y aura une classe de ce genre dans la liste déroulante si vous utilisez DB première. Vous verrez cette classe dans la liste et je n'ai aucune idée pourquoi les autres classes sont dans la liste. Je pense que peut être un petit défaut de l'INTERFACE utilisateur de Microsoft.
Si vous ne savez pas ce que c'est la classe, il suffit d'aller à votre modèle EDMX et cliquez sur le concepteur.cs fichier associé. Au sommet de ce code, vous verrez la classe qui hérite de ObjectContext. C'est la catégorie que vous souhaitez sélectionner.
J'ai eu ce message d'erreur lorsque j'avais mélangé le "modèle de classe" et "classe de contexte de données".
Je ne sais pas si c'est exactement ce que vous cherchez.. mais j'ai remarqué la même erreur que moi-même..
Google n'a pas beaucoup d'aide et j'ai fini par repérer le problème moi-même.
Solution Possible:
Si vous êtes à la création d'un Modèle qui contient un EF (Entity Framework) classe qui étend la classe à une autre classe.. assurez-vous que vous êtes à la prorogation du constructeur à la destination de l'EF classe, et non pas le Modèle de fichier de Classe involontairement..
Je m'excuse pour la mauvaise explication, mais je suis nouveau sur ce..
Laissez-moi savoir si cela aide.
Ce qui concerne
J'ai réglé ce problème dans WinDbg et Elle est causée par le texte suivant
Microsoft.VisualStudio.Web.Mvc.Scaffolding.BuiltIn.EntityFrameworkServices
méthode:Cette méthode retourne false, car il est passé le mauvais Type. Je ne suis pas sûr d'où ils viennent, mais il y a plusieurs Dll chargées à l'intérieur de VS qui contiennent des implémentations de type de contexte, mais un seul d'entre eux est Dérivé De DbContext - tous les autres sont dérivées à partir du Système.Objet. ces faux types d'assemblées sont dans mon "%localappdata%\assembly' répertoire, de sorte qu'ils ont été auto-généré par l'outil et de le charger dans VS.
Le bug est causé par le fait que
Microsoft.VisualStudio.Web.Mvc.Util.TypeHelper.GetType
que les filtres par Type.FullName. afin de trouver le bon Type, il est également nécessaire de filtrer parIsValidContextType()
.Ok, quelque chose de vraiment bizarre qui se passe. J'ai 2 classes partielles pour mon DbContext classe dérivée (la plupart des il est auto-généré par un .tt script, et certains sont fabriqués à la main). lorsque j'essaie d'ajouter un contrôleur, VS ajoute de nouvelles propriétés à mon partiel de la classe, puis il génère qu'une partie de la classe partielle (seulement la partie manuelle, et il n'utilise pas la classe de base). puis il charge que les DLL qu'il construit à partir de la moitié de la classe du modèle dans la mémoire, alors il échoue à la base de la classe case ci-dessus.
bizarre.
bas de ligne: essayez de supprimer les classes partielles de votre modèle de contexte, si vous en avez un.
J'ai eu le même problème avec EF. Je suis l'aide de la VS 2012
La raison de mon cas.. cette génération automatique de processus (Échafaudage) ne semble pas reconnaître la classe partielle concept.
J'ai utilisé le modèle de la première approche, et j'ai utilisé l'héritage avec les entités.
Ex: l'entité “B” et “C” est hérité “d'Un”
Donc, dans mon modèle généré classe “DataModelContainer” qui est hérité des “DbContext”,
Il n'y a pas de définition des “DbSet” et “DbSet”
j'.e: les deux lignes suivantes n'étaient pas là
Généré “DataModelContainer” classe j'ai une classe partielle, donc j'ai terminé l'autre partie, à l'aide de la notion de classe partielle. Et serait-ce un problème pour l'Échafaudage.
Ma solution est, juste enlevé la classe partielle, j'ai ajouté manuellement. Et ajouté les définitions de “DbSet” et “DbSet” à la génération automatique de classe.
Le problème avec cette solution est, je dois répéter la même chose quand j'régénérer les classes du modèle.