MVC4 Échafaudage Ajouter un Contrôleur donne une erreur “Impossible de récupérer les métadonnées...”
Je suis à l'aide de la version RTM de Windows 8 et visual studio 2012 Ultimate. J'ai un MVC4 projet à l'aide de SqlCe 4.0 avec un premier code de modèle d'entity framework.
Modèle est très simple:
public class MyThing
{
public int MyThingId { get; set; }
public int UserId { get; set; }
public string Title { get; set; }
public string Address { get; set; }
public string Description { get; set; }
public DateTime Date { get; set; }
}
Lorsque j'essaie de créer un nouveau contrôleur de l'échafaudage trop j'obtiens l'erreur suivante:
"Impossible de récupérer les métadonnées pour MyThing"
"À l'aide de la même DbCompiledModel de créer des contextes contre les différentes
types de serveurs de base de données n'est pas pris en charge. Au lieu de cela, créer un
séparer DbCompiledModel pour chaque type de serveur utilisé.
Comment puis-je obtenir un échafaudage pour travailler?
- Il y a une solution spécifique par - Suplanus si vous êtes venu ici en tant que résultat de MySql et non pas SqlCe
Vous devez vous connecter pour publier un commentaire.
Par essais et erreurs, j'ai trouvé la ligne de code (c'est le DbContext ctor) qui est à l'origine de l'erreur:
WTF?
J'ai aussi rencontré ce problème lors de l'exécution d'un tutoriel sur le sujet de la construction d'un MVC Music Store d'application.
Il y a définitivement semble être un bug au sein de Visual Studio. Ce qui semble déclencher ce bug est de choisir un certain nom, autre que celle par défaut, utilisé pour la chaîne de connexion.
Mes remerciements vont à l'utilisateur dwaynef sur http://forums.asp.net/t/1838396.aspx/1 pour trouver cette solution de contournement.
Un peu élaboré, vous devez temporairement lors de l'ajout du nouveau échafaudage contrôleur, changer le nom de votre chaîne de connexion à 'DefaultConnection' dans le web.config:
Si vous avez plus d'une connexion de la chaîne - assurez-vous que celle-ci est-il lors de l'exécution de l'action.
Voici mes deux cents. Je ne crois pas que votre solution en fait les adresses de la vraie question. La vraie solution est de passer au constructeur de base le nom de la base plutôt que de la chaîne de connexion nom donc, si votre chaîne de connexion est
vous êtes contexte de la classe doit être définie comme
Espère que cela fonctionne pour vous et les autres comme il le fait pour moi.
\SQLEXPRESS
exemple dans la machine de l'utilisateur. C'est plus comme un substitut de la solution.Voici ce qui a fonctionné pour moi:
providerName="System.Data.SqlClient"
au lieu de
providerName="System.Data.SqlServerCe.4.0"
System.Data.SqlServerCe.4.0
".Fonctionne pour moi:
Dans la rubrique "Ajouter un Nouveau Échafaudée Rubrique" boîte de dialogue, j'ai ajouté un nouveau contexte (plus) avec n'importe quel nom (pour moi "ScaffoldingContext").
Ensuite, l'échafaudage travaux. Il suffit de renommer le contexte dans le Contrôleur.
Après avoir essayé différentes options, la méthode ci-dessous permet de résoudre l'erreur..
Si le nom de la valeur dans la chaîne de connexion correspond à la valeur passée au constructeur, il fonctionne.
Problème est peut-être en raison du manque d'
[NotMapped]
Attributdans un de la classe du modèle.
Que j'ai raté l'attribut et j'ai été la ruse de ma tête.
Cela peut parfois être causée par une association de propriété ou un attribut clé étrangère
[ForeignKey("reference")]
annotations pour le faire fonctionner.J'ai eu un problème similaire, mais ce n'était pas le constructeur par défaut. C'est également le cas si vous avez plusieurs projets dans votre solution et votre "Web" face MVC projet ne fait pas référence EntityFramework.
Changer "les Choses" de l'intérieur
à
"Database1" où "Database1" est le nom de la base de données de fichier sur le disque qui apparaît dans votre
Web.config
fichier en tant que "Database1.sdf"La solution qui a fonctionné pour moi est de passer le même nom de base de données que dans votre chaîne de connexion à la base de constactor de votre classe dbContext.
J'ai résolu ce problème en appuyant sur CTRL+F5 pour reconstruire mon projet avant de l'ajouter dans mon contrôleur.
J'ai eu un problème similaire lors de la tentative de créer une vue à partir de mon contrôleur à l'aide de l'échafaudage. Dans le dialogue créer un affichage j'ai tout simplement effacé de la "Classe de Contexte de Données" liste déroulante, puis l'échafaudage mécanisme libellé de l'amende.
C'est ce qui a fonctionné pour moi ..
J'ai commenté la connectionstring en utilisant le Système.Les données.SqlServerCe.4.0' et
puis ajouté le contrôleur avec des échafaudages modèles.
Dans votre contexte de la classe, vous avez un commentaire le DbConfigurationType lorsque vous allez créer un contrôleur avec des échafaudages.
MVC 5 /EF 6
peut-être vous pouvez le faire à l'ancienne version?
a fonctionné pour moi!
J'ai eu le même message d'erreur, mais cela n'a rien à voir avec la chaîne de connexion.
C'est un cas très rare, mais j'espère que cela aidera quelqu'un. Mon nom de modèle est le même que l'un des segments de mon nom d'espace de noms.
Par exemple:
J'ai renommé mon espace de noms et la correction de tous les usages et puis le t4 échafaudage travaillé!
Son une autre solution possible. Vous pouvez exécuter un échafaudage pour les "dépendants" des modèles de première. Ensuite, travailler votre chemin jusqu'à des modèles complexes qui ont de nombreuses dépendances.