web-dev-qa-db-fra.com

L'initialiseur de type pour 'System.Data.Entity.Internal.AppConfig' a ​​levé une exception

Je travaille avec EF5 sur un site Web aspnet de MVC 4 ..__ Localement, tout fonctionne correctement, mais lorsque je le publie sur IIS et que j'essaie d'entrer, le message d'erreur s'affiche.

"Le type d'initialiseur pour 'System.Data.Entity.Internal.AppConfig' A levé une exception."

Exception détaillée

Une erreur s'est produite lors de la création du gestionnaire de section de configuration pour entityFramework: Configuration pour le type DbContext 'GdpSoftware.Server.Data.GdpSoftwareDbContext, GdpSoftware.Server.Data 'est spécifié plusieurs fois dans le fichier configuration de l'application. Chaque contexte ne peut être configuré qu'une seule fois . (E:\App\web.config ligne 104)

J'ai vérifié la question précédente dans StackOverflow et j'ai déjà désinstallé et réinstallé via Nuget EntityFramework et vérifié que chaque référence à celle-ci dans chaque projet est EF5. J'ai également vérifié que le cadre sélectionné dans chaque projet est 4.5.

Toute idée, quelle pourrait être la cause du problème? Merci! Guillermo.

web.config

<?xml version="1.0" encoding="utf-8"?>
<!--
  For more information on how to configure your ASP.NET application, please visit
  http://go.Microsoft.com/fwlink/?LinkId=169433
  -->
<configuration>
  <configSections>
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />

  <!-- For more information on Entity Framework configuration, visit http://go.Microsoft.com/fwlink/?LinkID=237468 --></configSections>
  <connectionStrings>
    <add name="GdpSoftwareConnectionString" connectionString="Persist Security Info=False;User ID=user;Password=password;Initial Catalog=databasename;Data Source=server" providerName="System.Data.SqlClient" />
    <add name="GdpSoftware.Server.Data.GdpSoftwareDbContext" connectionString="GdpSoftware.Server.Data.GdpSoftwareDbContext_ConnectionString" providerName="System.Data.SqlClient"/>
    <add name="GdpSoftware.Server.Ui.Web.Models.UsersContext" connectionString="GdpSoftware.Server.Ui.Web.Models.UsersContext_ConnectionString" providerName="System.Data.SqlClient"/>
  </connectionStrings>
  <appSettings>
    <add key="webpages:Version" value="2.0.0.0" />
    <add key="webpages:Enabled" value="false" />
    <add key="PreserveLoginUrl" value="true" />
    <add key="ClientValidationEnabled" value="true" />
    <add key="UnobtrusiveJavaScriptEnabled" value="true" />
  </appSettings>
  <system.web>
    <compilation debug="true" targetFramework="4.5" />
    <httpRuntime targetFramework="4.5" />
    <authentication mode="Forms">
      <forms loginUrl="~/Account/Login" timeout="2880" />
    </authentication>
    <pages>
      <namespaces>
        <add namespace="System.Web.Helpers" />
        <add namespace="System.Web.Mvc" />
        <add namespace="System.Web.Mvc.Ajax" />
        <add namespace="System.Web.Mvc.Html" />
        <add namespace="System.Web.Optimization" />
        <add namespace="System.Web.Routing" />
        <add namespace="System.Web.WebPages" />
      </namespaces>
    </pages>
    <!-- BEGIN - TO SEE THE ERRORS ON THE DEPLOYMENT-->
    <customErrors mode="Off" />
    <!-- END - TO SEE THE ERRORS ON THE DEPLOYMENT-->
  </system.web>
  <system.webServer>
    <!-- BEGIN - TO SEE THE ERRORS ON THE DEPLOYMENT-->
    <httpErrors errorMode="Detailed" />
    <asp scriptErrorSentToBrowser="true" />
    <!-- END - TO SEE THE ERRORS ON THE DEPLOYMENT-->
    <validation validateIntegratedModeConfiguration="false" />
    <handlers>
      <remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" />
      <remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" />
      <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
      <add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
      <add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
      <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
    </handlers>
    <staticContent>
      <mimeMap fileExtension=".mustache" mimeType="text/plain" />
    </staticContent>
    <security>
      <requestFiltering>
        <fileExtensions>
          <add fileExtension=".mustache" allowed="true" />
        </fileExtensions>
      </requestFiltering>
    </security>
  </system.webServer>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-Microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="4.0.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="Castle.Windsor" publicKeyToken="407dd0808d44fbdc" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-3.2.0.0" newVersion="3.2.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-4.5.0.0" newVersion="4.5.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="Microsoft.Owin.Host.SystemWeb" publicKeyToken="31bf3856ad364e35" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-1.0.0.0" newVersion="1.0.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="Castle.Core" publicKeyToken="407dd0808d44fbdc" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-3.2.0.0" newVersion="3.2.0.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
    <contexts>
      <context type="GdpSoftware.Server.Data.GdpSoftwareDbContext, GdpSoftware.Server.Data" disableDatabaseInitialization="true">
        <databaseInitializer type="System.Data.Entity.MigrateDatabaseToLatestVersion`2[[GdpSoftware.Server.Data.GdpSoftwareDbContext, GdpSoftware.Server.Data], [GdpSoftware.Server.Data.Migrations.Configuration, GdpSoftware.Server.Data]], EntityFramework" />
      </context>
    </contexts>
  </entityFramework>
</configuration>
36
polonskyg

Je devais changer par defaultConnectionFactory pour être SqlConnectionFactory au lieu de la valeur par défaut

<entityFramework>
  <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework">
    <parameters>
      <parameter value="<My Connection String>" />
    </parameters>
  </defaultConnectionFactory>
</entityFramework>

http://blogs.msdn.com/b/davidobando/archive/2012/08/14/changing-ef-s-default-provider-from-localdb-to-sql-server.aspx

22
Brian

Procédez comme suit dans le fichier App.config,

  1. Placez l'élément connectionStrings après l'élément configSections.
  2. Placez l'élément startup après l'élément connectionStrings.
<?xml version="1.0" encoding="utf-8"?>
 <configuration>
   <configSections>
         <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=4.3.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
   </configSections>
   <connectionStrings>
         <add name="SchedulingContext" connectionString="Data Source=XXX\SQL2008R2DEV;Initial Catalog=YYY;Persist Security Info=True;User ID=sa;Password=XXX"   providerName="System.Data.SqlClient"/>
   </connectionStrings>
   <startup>
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
  </startup>       
 </configuration>
73
Diganta Kumar

J'ai constaté que la suppression des références à Entity Framework et l'installation de la dernière version d'Entity Framework de NuGet corrigeaient le problème. Il recrée toutes les entrées requises pour vous lors de l'installation.

4
Ben Pretorius

J'avais plusieurs providers spécifiés dans mon web.config.

 <providers>
      <provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6" />
      <provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6, Version=6.9.6.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d"></provider>
    </providers>

J'ai simplement enlevé un de ceux-ci et cela a fonctionné.

J'utilise bien MySQL, pas TSQL

2
Luke

Je me suis cassé la tête à propos de ce problème et voici enfin ce qui a fonctionné pour moi: -

Étape 1: Désinstallez Entity Framework à l'aide du gestionnaire de packages Nuget.

Étape 2: Supprimer l'élément Entityframework de App.config

Étape 3: réinstallez la version souhaitée d’Entity Framework.

Étape 4: supprimez la table des migrations et le dossier Migrations.

Étape 5: Activer les migrations et ajouter la base de données de migration et de mise à jour

2
Golden Griffin

J'ai rencontré ce problème lorsque j'ai oublié de définir mon fichier Connections.config sur "Copier toujours"

BareMessage = "Impossible d'ouvrir le fichier configSource 'Connections.config'."

1
Matt Knight

J'ai eu cette erreur aujourd'hui sur une application MVC imbriquée s'exécutant comme un dossier virtuel dans une autre application MVC. Dans mon cas, l’exception InnerException était plus informative que la principale. Il déclarait:

- The entry 'DbContextMain' has already been added. (C:\inetpub\...\web.config line x)

Après avoir corrigé les chaînes de connexion en double dans les applications imbriquées, tout a bien fonctionné.

0
Stefan Michev

Dans la chaîne de connexion, la première chaîne est la base dans web.config 

SchedulingContext est le paramètre de base du fichier d'entité.

<connectionStrings>
     <add name="SchedulingContext" connectionString="Data Source=XXX\SQL2008R2DEV;Initial Catalog=YYY;Persist Security Info=True;User ID=sa;Password=XXX"   providerName="System.Data.SqlClient"/>

0
Rajashekar Jadala

J'ai eu le même problème. Après un jour, je l'ai eu.

Le problème provenait de l'ajout de deux balises smtp dans mailSettings sous <system.net>.

0
Mohsen Unlimited

Le problème général concerne tout problème impliquant des configurations Machine/Web/App.

J'avais les mêmes chaînes de connexion dans Machine.Config que dans mon App.Config, donc j'ai mis avant ma première chaîne de connexion dans mon App.Config

0
Paul Totzke

J'ai rencontré un problème similaire et changer defaultConnectionFactory en SqlConnectionFactory m'a aidé à le résoudre.

0
Sudha Vijayakumar

Si vous gérez un fichier de configuration supplémentaire pour app.config, n'incluez aucune clé dans la page parent.

Page parent: app.config

<appSettings configSource="appSettings.config">
    <add key="ClientSettings" value="venice" /> <!-- Don't add Key Here -->
</appSettings>

Page enfant: appSettings.config

<appSettings>
  <add key="ClientSettings" value="venice"/> <!-- add Here -->
</appSettings>
0
Bala Kumar

Je pense que le problème vient de cette ligne:

<context type="GdpSoftware.Server.Data.GdpSoftwareDbContext, GdpSoftware.Server.Data" disableDatabaseInitialization="true">

Je ne sais pas pourquoi vous utilisez cette approche et comment cela fonctionne ... 

Peut-être que c'est mieux d'essayer de le sortir de web.config et d'aller d'une autre manière

0
Amin Saqi

J'ai également rencontré le même problème, mais dans mon cas, ma solution a une application console et une bibliothèque de classes EF qui interagissent principalement avec une base de données. J'ai supprimé les paramètres de configuration liés à EF de la console d'application de la console. J'ai conservé les paramètres de configuration suivants dans la bibliothèque de classes EF, c.-à-d. À un seul endroit.

Cela a fonctionné pour moi.


<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.2.61023.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />

 

<add name="EntityModel" connectionString="Server=Localhost\SQLEXPRESS;Database=SampleEntities;Trusted_Connection=True;" providerName="System.Data.EntityClient" />


0

erreur réelle générée Message = L'élément non reconnu 'fournisseurs' dans web.configso du fichier web.config supprime la section fournisseurs

0
Bala

Recherchez dans votre web.config ou App.Config si vous avez des balises qui ne sont pas utilisées dans votre projet ou dans vos références.

0
Oswaldo Alvarez

Cette erreur étrange se produit lorsque vous jouez avec différentes versions des versions d'EntityFramework dans les packages Nuget comme je l'ai fait.

Commencez par désinstaller votre Entity Framework DLL des packages NuGet, puis nettoyez app.config. En supprimant l'entrée de configSections et de l'élément framework framework. 

Ensuite, installez la version souhaitée. Cela devrait résoudre le problème.

0
Bharat Raj

Si vous utilisez ASP.NET et IISExpress, accédez à "C:\Utilisateurs \\ Documents\IISExpress\config\applicationhost.config", recherchez votre projet et recherchez si vous avez une entrée virtualDirectory défectueuse. 

0
malt