2

Je construis un contrôleur en utilisant un échafaudage, à partir d'un modèle de base de données.Modèle Premier échafaudage ne fonctionnant pas dans ASP.NET MVC3 Application

La base de données dans le backend est SQL Azure, bien que je ne sache pas si cela compte.

J'ai entré la chaîne de connexion, et testé, et cela fonctionne. J'ai ajouté un nouveau modèle de données d'entité ADO.Net à mes modèles, et il a créé les mappages, et je peux voir la structure de la table et les FK lorsque j'ouvre le modèle créé, et cela semble correct.

J'ai construit la solution pour que le nouveau modèle soit disponible.

Je me suis assuré d'avoir la dernière version d'Entity Framework, et j'ai téléchargé le MvcScaffolding de NuGet.

Quand j'ajouter nouveau contrôleur avec lecture/écriture des actions et des vues, en utilisant Entity Framework, je reçois l'erreur suivante:

Le type « Website.Models.App.Application » n'a pas été mis en correspondance. Vérifiez que le type n'a pas été explicitement exclu en utilisant la méthode Ignorer ou l'annotation de données NotMappedAttribute. Vérifiez que le type a été défini en tant que classe, qu'il n'est pas primitif, imbriqué ou générique et qu'il n'hérite pas d'EntityObject. Lorsque j'essaie d'ajouter le même contrôleur en utilisant MvcScaffolding: Contrôleur avec des actions de lecture/écriture et des vues, en utilisant le code d'accès aux données EF, je ne reçois pas d'erreur à ce stade, mais lorsque je navigue vers la vue Index du nouveau contrôleur, je reçois la même erreur.

Des idées sur ce qui cause cette erreur? J'ai cherché longtemps une solution mais tout est vide. Je vous remercie.

+0

Mise à jour: J'ai trouvé le code suivant dans les AppModel.Designer.cs, le fichier cs attaché au modèle edmx: public partial class UserApplication: EntityObject Je suppose que je ne peut pas simplement supprimer l'EntityObject là-dedans, corre ct? Il semble que toutes les classes partielles représentant mes tables héritent de EntityObject. Qu'est-ce qui a causé cela et comment puis-je le réparer? Toute idée sur le problème sera très appréciée. Je vous remercie. – Bassel

+0

Renommez cette entité en disant test d'application et compilez, puis réessayez. Je me demande si le nom cause un problème. –

+0

hmm que voulez-vous dire par renommer l'entité? devrais-je renommer la table appelée application dans la base de données en test d'application, puis générer à nouveau l'entité? – Bassel

Répondre

0

dans le concepteur d'entité (fichier .edmx), faites un clic droit sur une zone vide, cliquez sur 'Ajouter un élément de génération de code', sélectionnez 'ADO.NET DbContext Generator' donnez-lui un nom, cliquez sur ajouter. >> ne me souviens plus pourquoi vous devez faire :-(mais il fixe le même problème pour moi.

+0

Merci pour la réponse. Cela n'a pas fonctionné; Lorsque j'ai cliqué sur Ajouter un élément de génération de code, sous la catégorie Code (les autres catégories étaient toutes vides), j'avais deux options: ADO.NET EntityObject Generator et ADO.NET Self-Tracking Entity Generator. J'ai choisi le premier et il a généré un fichier .tt, mais j'ai eu le même problème après avoir essayé d'échafauder. Je ne sais pas s'il devait y avoir une option ADO.Net DbContext Generator? Si oui, je ne pouvais pas le voir. – Bassel

+0

ouvrez d'abord le concepteur, puis faites un clic droit> propriétés, puis modifiez la stratégie de génération de code de "par défaut" à Aucun, puis ajoutez l'élément de génération de code – robasta

+0

Hmm cela semble avoir brisé plusieurs choses que je suis en train d'essayer de réparer. La stratégie de génération de code était déjà sur None; Je l'ai changé par défaut pour voir comment cela fonctionnerait. Il n'a pas été construit parce qu'il se plaignait de l'élément générateur. J'ai supprimé cela, et l'application a été reconstruite, mais quand j'ai essayé d'ajouter un contrôleur, j'obtiens une erreur: Exception appelant "GetControllerScaffolders" avec "1" argument (s): "Les méthodes WriteObject et WriteError ne peuvent pas être appelées après le Le pipeline a été fermé. Veuillez contacter les services de support Microsoft. " Maintenant, il ne sera plus construit. – Bassel

1

net DbContext générateur Installez, si non disponible à partir de modèles en ligne dans votre Visual Studio 2010

0

Vous avez probablement emboîtés votre vos classes dans la classe principale:

static void Class main(string[] args) 
{ 
    public Class YourClass() // This is the wrong location, it's nested in the main class 
    { 
     ... 
    } 
} 

public Class YourClass() // This is the correct location 
{ 
    ... 
} 
Questions connexes