web-dev-qa-db-fra.com

L'application ne peut pas échafauder des éléments

J'ai créé une application MVC 5 dans VS 2013 Professional, puis j'ai d'abord utilisé le code EF 6.1 avec une base de données existante sur SQL Server Express. Lorsque j'essaie de créer les vues, j'utilise le "Nouvel élément échafaudé…", puis en sélectionnant le "Contrôleur MVC 5 avec vues, en utilisant Entity Framework". Je sélectionne le modèle et les classes de contexte et cliquez sur OK. Ensuite, le message d'erreur suivant s'affiche et aucun code n'est créé. J'ai désinstallé EF Power Tools avec la même erreur.

Erreur

Une erreur s'est produite lors de l'exécution du générateur de code sélectionné: "Une exception a été levée par la cible d'une invocation."

J'ai également essayé de désinstaller/réinstaller VS 2013 et SQL Server sans aucun changement.

Avez-vous d'autres idées sur ce qui pourrait provoquer cette erreur?

47
runamuk0

J'ai aussi eu ce problème, j'ai résolu le problème en appelant le base.onModelCreating dans mon contexte DB

base.OnModelCreating(modelBuilder);
15
Mhand7

Dans mon cas, j'ai déplacé mes chaînes de connexion du Web.config vers

<connectionStrings configSource="ConnectionStrings.config"/>

que lorsque j'ai commencé à obtenir l'erreur alors que j'essayais d'échafauder.

Une erreur s'est produite lors de l'exécution du générateur de code sélectionné: "Une exception a été levée par la cible d'une invocation."

Déplacer mes chaînes de connexion vers le Web.config a résolu mon problème.

41
Developer SPM

Cela a résolu le problème pour moi,

Ajouter throwIfV1Schema: false à la base de DbContext

Ainsi:

public MyDbContext() : base("ConectionStringName", throwIfV1Schema: false) { }
13
Rewdiz

J'avais rencontré le même problème lors de la création d'un contrôleur à l'aide d'un échafaudage avec 'ASP.NET MVC5 à l'aide de vues avec Entity Framework'

Le problème était dû au fait que j'ai fourni <connectionStrings> tag avant <configSections> dans web.config. réglage <connectionStrings> après <configSections> a résolu le problème.

Je suppose que pendant l'échafaudage, ASP.NET MVC veut d'abord résoudre Entity Framework, puis la chaîne de connexion, car j'ai fourni la chaîne de connexion plus tôt afin qu'après avoir résolu la version Entity Framework, il ne puisse pas trouver la chaîne de connexion, ce qui a provoqué un problème d'invocation .

12
Shirajul Mamun

Réponse tardive; mais, je poste ces réponses dans l'espoir que quelqu'un puisse utiliser cette réponse pour résoudre leur problème.

Pour une raison quelconque, si votre programme NE PEUT PAS lire les informations de connectionString (à partir de web.config ou d'autres moyens), cette erreur sera levée.

Assurez-vous que les informations de connectionString valides sont correctement récupérées sans aucun problème.

10
Ashok kumar

J'ai eu le même message d'erreur. J'ai essayé d'ajouter un nouveau Data context class dans la boîte de dialogue Ajouter un contrôleur, puis j'ai reçu une erreur différente:

There was an error running the selected code generator:
'Sections must only appear once per config file. See the help topic
<locations> for exceptions.

Il s'avère que j'avais deux <connectionStrings> éléments dans mon fichier web.config. (J'en avais collé un à partir du fichier app.config de la bibliothèque de classes qui contenait mon modèle Entity Framework.)

6
n8mob

J'ai eu le même problème où il n'ajoutait pas d'éléments d'échafaudage, il semble que la désinstallation de l'entité-cadre via la console du gestionnaire de paquets nuget fonctionne

Pour exécuter Package Manager Console:

Outils -> NuGet Package Manager -> Console du gestionnaire de packages

Ôter:

UnInstall-Package EntityFramework

Pour réinstaller:

Install-Package EntityFramework

Ou en une seule commande:

Update-Package -reinstall EntityFramework

J'espère que cela peut aider quelqu'un car il m'a fallu un certain temps pour en arriver là.

5
Enzero

Dans mon cas, j'ai dû rétablir mon constructeur DBContext en utilisant simplement une chaîne de connexion statique, comme défini dans web.config

L'échafaudage ne fonctionnait pas lorsque j'utilisais une chaîne de connexion créée dynamiquement.

public MyContext() : base("name=MyContext") { }
5
tr3v

Cela peut aider à résoudre votre erreur.

Dans mon OnModelCreating, je faisais cela pour chaque entité:

modelBuilder.Configurations.Add(new EntityTypeConfiguration<EntityModel>);

Lorsque je l'ai changé pour le suivant, j'ai cessé de recevoir l'erreur que vous recevez.

modelBuilder.Entity<EntityModel>();
3
chicken

J'ai essayé la plupart de ce qui précède sans chance.

Ce qui a finalement fonctionné était:

  1. Supprimer l'entrée de chaîne créée dynamiquement précédemment
  2. Supprimer mon modèle (en conservant tous les contrôleurs et vues)
  3. Recréez le modèle de données d'entité ADO.NET - en utilisant le même nom, en créant une nouvelle entrée de chaîne de connexion avec le même nom qu'auparavant

Puis tout a fonctionné à nouveau, moins 3 heures de temps de développement.

  1. rajouter (à partir d'une sauvegarde) tous mes attributs de propriété aux classes de table/entité

Semble avoir quelque chose à voir avec la chaîne de connexion créée dynamiquement et le modèle. J'apprécierais toute réflexion sur ce qui aurait pu arriver.

3
user1695121

J'ai également rencontré ce problème en utilisant VS 2015. J'ai essayé toutes les autres solutions ici sans succès. Il s'est avéré que ma chaîne de connexion (bien que formée exactement comme MS nous dit de la former) avait besoin de double\pour fonctionner correctement.

Voici ce qui ne fonctionnait pas:

<add name="DefaultConnection" connectionString="Data Source=(LocalDb)\V11.0;AttachDbFilename=|DataDirectory|\SquashSpiderDB.mdf;Initial Catalog=SquashSpiderDB;Integrated Security=True" providerName="System.Data.SqlClient" />

et voici ce que j'ai changé pour que le générateur de code fonctionne:

<add name="DefaultConnection" connectionString="Data Source=(LocalDb)\\V11.0;AttachDbFilename=|DataDirectory|\SquashSpiderDB.mdf;Initial Catalog=SquashSpiderDB;Integrated Security=True" providerName="System.Data.SqlClient" />

Remarquez les doubles caractères\devant V11.0 et le nom de la base de données.

J'espère que cela fera gagner du temps à quelqu'un d'autre.

MISE À JOUR

Cela permet à la génération de code de fonctionner, mais l'application ne s'exécutera pas car\V11.0 n'est pas une chaîne de connexion valide. Cela me semble que MS a un bug dans leur génération de code lors de l'analyse de la chaîne de connexion. J'ai dû le reconvertir en un seul\après avoir exécuté la génération de code pour que l'application fonctionne à nouveau.

MISE À JOUR 2

Après quelques recherches supplémentaires par mon partenaire, nous avons découvert que ce qui était vraiment en train de gâcher la génération de code était le fait que nous avions changé le champ "Catalogue initial". Lorsque le projet a été créé par l'assistant, il a automatiquement défini le catalogue initial sur aspnet--. Nous avions alors changé ce champ de catalogue initial en DB. Cela a très bien fonctionné pour l'application en cours d'exécution. Il pourrait très bien accéder à la base de données. Mais pour une raison quelconque, cela gâche la génération d'échafaudage de code. En remettant le catalogue initial à ce qu'il était auparavant (l'aspnet--, l'échafaudage a recommencé à fonctionner (sans avoir besoin du\V11.0).

J'espère que cela aidera quelqu'un à l'avenir.

2
Greg Veres

Il semble que le problème de connexion du paramètre/entrée incohérente via via Web.config. Pour résoudre ce problème, suivez les étapes ci-dessous:

Supprimez les informations relatives à la connexion (en commençant par <connectionStrings> de Web.config et supprimer les modèles générés jusqu'à présent.

Générez maintenant le modèle et il ajoutera une nouvelle entrée de connexion dans Web.config fichier. Une fois le modèle généré, créez la solution puis commencez à contrôler l'échafaudage. ça va marcher.

2
Manish K Pandey

Ma solution était aussi simple que de changer le nom de la chaîne de connexion dans ma configuration Web en DefaultConnection. Même si mon dbContext a un autre nom!

Cela m'a pris 2 heures pour découvrir ce non-sens!

2
DJ.

Dans mon cas, j'ai résolu le problème avec la chaîne de connexion dans le web.config.

Prévient le problème que j'ai <connectionStrings configSource="Configs\ConnectionString.config"/>

et je ne sais pas pourquoi, mais je ne peux pas me connecter à la base de données et échouer.

après le changement

<connectionStrings> <add name="UIBuilderContext" connectionString="metadata=res:/ ..... " /> </connectionStrings>

et il fonctionne

2
Math

Vérifiez les relations entre les entités ou tout autre problème de conception de modèle. Pour les tests, créez un nouveau modèle de classe sans aucune relation et utilisez Scaffold pour générer des contrôleurs et des vues. Travaille pour moi.

2
FVVID

J'ai eu la même erreur. Voici les deux choses que j'ai faites pour résoudre le problème:

  1. Nom ajouté à la base dans mon contexte: base ("name = connectionstringname")
  2. J'ai fait une erreur dans ma chaîne de connexion et l'ai corrigée.
1
Reonbs

Si par hasard vous suivez "Mise en route avec Entity Framework 6 Code First using MVC 5" par Tom Dykstra.

J'ai tout vérifié et ma chaîne de connexion est parfaite. Ce que je n'ai pas réalisé, c'est que j'ai copié un autre ensemble d'appSettings que j'ai déjà. Regardez ci-dessous

  <appSettings>
    <add key="webpages:Version" value="3.0.0.0" />
    <add key="webpages:Enabled" value="false" />
    <add key="ClientValidationEnabled" value="true" />
    <add key="UnobtrusiveJavaScriptEnabled" value="true" />
  </appSettings>

Mon conseil est de vérifier chaque centimètre de Web.config et je suis sûr que c'est le coupable.

1
Crismogram

Dans mon cas, NuGet a ajouté le fournisseur suivant au web.config:

<provider invariantName="System.Data.SqlServerCe.4.0" type="System.Data.Entity.SqlServerCompact.SqlCeProviderServices, EntityFramework.SqlServerCompact"/>

Quand j'ai changé de fournisseur pour

<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer"/>

Cela a résolu le problème (cela m'a coûté environ 5 heures pour le comprendre :-()

1
Stefan de Groot

J'obtenais la même erreur lorsque j'ai apporté des modifications à mon modèle. La seule façon que j'ai pu résoudre était 1) arrêter/tuer le processus 2) nettoyer la solution et reconstruire la solution

1
user3507981

C'est (je suis positif à 99%) un problème de chaîne de connexion. Une fois que j'ai résolu le problème dans Web.Config, l'erreur a disparu. J'utilisais DB d'abord, dans un autre projet et une fois que j'ai copié la première chaîne de connexion DB de App.config dans le web.config (en utilisant le même nom), cela a fonctionné comme prévu.

1
ransems

J'avais ceci:

<appSettings configSource="App_Config\Server\AppSettings.config" />
<connectionStrings configSource="bin\Connections.config" />

J'ai dû retirer LES DEUX ET remettre.

<connectionStrings>
    <add name="UIBuilderContext" connectionString="metadata=res:/ ..... " />
  </connectionStrings>

La suppression a tout de même provoqué la même erreur.

0
RC Cola

Utilisation de Visual Studio 2015

Mise à niveau du serveur mysql et dans le processus, le mysql pour visual studios a été mis à niveau de 6.9.7 à 6.9.8

Dans ma configuration Web, il y avait toujours une référence à l'ancienne version 6.9.7

Voici mon diff git qui a résolu le problème:

-      <provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices,MySql.Data.Entity.EF6,Version=6.9.7.0,Culture=neutral,PublicKeyToken=c5687fc88969c44d"></provider>
+      <provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices,MySql.Data.Entity.EF6,Version=6.9.8.0,Culture=neutral,PublicKeyToken=c5687fc88969c44d"></provider>
0
Kyle s

Dans mon cas, le problème est dû à un fichier de paramètres d'application externe:

<appSettings configSource="appSettings.config" />

Le fait de ramener les paramètres de l'application dans le fichier web.config a résolu le problème.

<appSettings>
    <add key="webpages:Version" value="3.0.0.0" />
    <add key="webpages:Enabled" value="false" />
    <add key="ClientValidationEnabled" value="true" />
    <add key="UnobtrusiveJavaScriptEnabled" value="true" />
</appSettings>
0
Eric Scott

Je me rends compte que cette question est ancienne maintenant, mais j'ai pensé publier ce qui a résolu mon problème au cas où cela aiderait quelqu'un plus tard. Dans mon cas, c'était une combinaison de plusieurs choses mentionnées dans d'autres réponses. Pour sécuriser ma chaîne de connexion, j'avais ...

  1. Déplacement de la chaîne de connexion hors du fichier Web.config
  2. Déplacement du nom et du mot de passe du serveur vers un fichier distinct référencé dans la partie AppSettings de Web.config
  3. J'ai utilisé un SqlConnectionStringBuilder pour assembler les éléments, puis le transmettre à mon constructeur de classe de contexte

Après cela, je n'ai plus pu créer de contrôleurs. Pour résoudre le problème, je devais ...

  1. Remettez la chaîne de connexion complète dans Web.config ET supprimez la référence au fichier de chaîne de connexion externe
  2. Ajoutez un constructeur sans paramètre à ma classe de contexte et donnez-lui le nom de ma connectionString comme ceci: public contextClass() : base("name=connectionStringName") { }

  3. Reconstruisez la solution et créez à nouveau le contrôleur, et cela a fonctionné!

0
starx207

Pour une raison quelconque, lorsque je commente la section Oracle.manageddataaccess.client entre <configSections> dans web.config, cela a fonctionné. (VS 2015 et ODT 12)

<configSections>   
    <section name="entityFramework" type" />
    <!-- For more information on Entity Framework configuration, visit http://go.Microsoft.com/fwlink/?LinkID=237468 -->
    <!--<section name="Oracle.manageddataaccess.client" />-->
</configSections>
0
Ryan Walker

toutes les personnes. Je sais que je suis un peu en retard, mais je pense que c'est toujours valable pour partager mon expérience avec ce problème.

J'ai rencontré ce message dans deux projets et dans les deux cas, le problème était lié à la chaîne de connexion.

Dans le premier cas, il s'agissait de "InitialCatalog" au lieu de "Initial Catalog" (séparé).

Dans le second cas, le nom du serveur (paramètre de source de données) était incorrect.

J'espère que ça aide.

Meilleures salutations.

0
Joel Rodrigues