“System.Data.Entity.Internal.AppConfig”的types初始值设定项引发exception

我在MVC 4 aspnet网站上使用EF5。 在本地,一切正常,但是当我发布到IIS并尝试进入,我得到的错误

“System.Data.Entity.Internal.AppConfig”的types初始值设定项引发了一个exception。“

详细的例外

创buildentityFramework的configuration节处理程序时发生错误:在应用程序configuration中多次指定了DbContexttypes“GdpSoftware.Server.Data.GdpSoftwareDbContext,GdpSoftware.Server.Data”的configuration。 每个上下文只能configuration一次。 (E:\ App \ web.config第104行)

我在StackOverflow中检查了上一个问题,并且已经通过Nuget EntityFramework卸载并重新安装,并且检查了每个项目中对它的每个引用是EF5。 我也检查了每个项目中选定的框架是4.5。

任何想法,什么可能会导致这个问题? 谢谢! 吉列尔莫。

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> 

我需要通过defaultConnectionFactory更改为SqlConnectionFactory而不是默认值

 <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

在App.config文件中执行以下操作,

  1. connectionStrings元素放在configSections元素之后。
  2. startup元素放在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> 

我发现删除对Entity Framework的引用并从NuGet安装最新版本的Entity Framework解决了这个问题。 它会在安装过程中为您重新创build所有必需的条目。

我已经在这个问题上打破了头脑,最后这是对我有用的东西:

第一步:使用Nuget包pipe理器卸载entity framework

第2步:从App.config中删除Entityframework元素

第3步:重新安装所需的entity framework版本。

第四步:删除Migrations表和Migrations文件夹。

第5步:启用迁移并添加迁移和更新数据库

我有我的web.config中指定的多个provider

  <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> 

我只是删除其中的一个,它的工作。

我使用MySQL虽然,而不是TSQL

我遇到了这个问题,当我忘记将我的Connections.config文件设置为“始终复制”

BareMessage =“无法打开configSource文件”Connections.config“。”

我认为这个问题是从这一行开始的:

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

我不知道你为什么使用这种方法,它是如何工作的…

也许最好从web.config中解脱出来,换个angular度来看

如果您要为app.config维护一个更多的configuration文件,请不要在父页面中包含任何密钥。

父页面:app.config

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

子页面:appSettings.config

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

我有同样的问题。 一天之后,我明白了。

问题是在<system.net>下的mailSettings添加了两个smtp标记。

在你的web.configApp.Configsearch,如果你有一些标签没有在你的项目中使用,或者你没有在你的参考。

我今天有一个嵌套的MVC应用程序在其他MVC应用程序中作为虚拟文件夹运行的错误。 在我的情况下,InnerException比主要的更有价值。 这是说:

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

在嵌套的应用程序中修复重复的连接string后,一切正常。

如果您使用ASP.NET和IISExpress转到“C:\ Users \ Documents \ IISExpress \ config \ applicationhost.config”,search您的项目并查看是否有错误的virtualDirectory条目。

我面临类似的问题,改变defaultConnectionFactory为SqlConnectionFactory帮助我解决它。

引发实际错误消息= Web.config文件中的无法识别的元素“提供者”,以便从web.config文件中删除提供者部分

一般问题只涉及Machine / Web / Appconfiguration的任何问题。

我在我的App.Config Machine.Config中有相同的连接string,所以我把我的第一个连接string之前我的App.Config