53

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

“'System.Data.Entity.Internal.AppConfig' 的类型初始化程序引发了异常。”

详细异常

为 entityFramework 创建配置节处理程序时出错:在应用程序配置中多次指定 DbContext 类型“GdpSoftware.Server.Data.GdpSoftwareDbContext, GdpSoftware.Server.Data”的配置。每个上下文只能配置一次。(E:\App\web.config 第 104 行)

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

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

网络配置

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

27 回答 27

87

在 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>
于 2013-09-26T03:41:02.023 回答
26

我需要将 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/changeing-ef-s-default-provider-from-localdb-to-sql-server.aspx

于 2013-11-01T21:41:46.803 回答
6

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

于 2014-02-04T06:23:56.513 回答
4

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

Step1:使用 Nuget 包管理器卸载实体框架

Step2:从 App.config 中删除 Entityframework 元素

第三步:重新安装所需版本的实体框架。

Step4:删除 Migrations 表和 Migrations 文件夹。

Step5:启用迁移并添加迁移和更新数据库

于 2016-04-08T06:29:55.030 回答
2

provider我在 web.config 中指定了多个s。

 <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

于 2015-05-25T13:58:04.307 回答
2

根据以下代码更改您的 Web.config 中的这一部分。(试试这个,它对我有用。)

<entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework">
      <parameters>
        <parameter value="Data Source=.; Integrated Security=True; MultipleActiveResultSets=True" />   
      </parameters>
    </defaultConnectionFactory>
  </entityFramework>
于 2019-11-03T06:14:29.697 回答
2

我也遇到了同样的问题,但是在我的情况下,我的解决方案有一个控制台应用程序和主要与数据库交互的 EF 类库。我从控制台应用程序配置中删除了与 EF 相关的配置设置。我在 EF 类库中维护了以下配置设置,即仅在一个地方。

这对我有用。


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


于 2018-08-20T14:35:40.190 回答
1

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

BareMessage = "无法打开 configSource 文件 'Connections.config'。"

于 2016-05-18T15:58:54.583 回答
1

就我而言

<section name="entityFramework"

必须从版本 4 更新到 6。我的意思是项目已将 EntityFramework 从 4 更新到 6,但 web.config 没有更新。

于 2020-01-27T21:32:32.523 回答
0

我认为问题出在这一行:

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

我不知道你为什么要使用这种方法以及它是如何工作的......

也许最好尝试从 web.config 中取出它并采用另一种方式

于 2013-07-30T10:13:40.560 回答
0

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

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

于 2015-02-17T09:33:32.067 回答
0

如果您要为 app.config 再维护一个 cinfiguration 文件,请不要在父页面中包含任何键。

父页面: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>
于 2014-10-08T08:01:42.867 回答
0

如果您有一些在您的项目中未使用或在您的参考文献中没有的标签,请在您的或您的项目中web.config搜索。App.Config

于 2014-11-21T19:47:55.773 回答
0

我今天在另一个 MVC 应用程序中作为虚拟文件夹运行的嵌套 MVC 应用程序上遇到此错误。在我的情况下,InnerException 比主要的信息更丰富。它说:

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

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

于 2015-08-29T13:50:36.143 回答
0

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

于 2015-10-28T07:43:29.803 回答
0

在连接字符串中,第一个字符串是 web.config 中的基础

SchedulingContext是实体文件的基本参数。

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

于 2018-11-20T12:40:23.407 回答
0

一般问题只是涉及机器/Web/应用程序配置的任何问题。

我在 Machine.Config 中的连接字符串与在 App.Config 中的连接字符串相同,因此我将第一个连接字符串放在 App.Config 之前

于 2017-02-22T20:31:58.030 回答
0

老问题,但它只是因为其他答案中提到的不同原因而发生在我身上,所以我想我会分享我的发现。

就我而言,问题是我如何在 app.config 中定义我的连接字符串条目。我直接对其进行了编辑Notepad++,我一定是点击了快捷方式,并最小化了我没有发现的整个字符串,并开始出现此错误。我是这样定义的:

<add name="MyDb" connectionstring="data source=MyServer;
 initial catalog=MyDatabase;integrated security=true" 
 providername="System.Data.SqlClient" />

第二个我更改了以下参数

connectionstring to connectionString

providername to providerName

注意:该问题在 Visual Studio 中立即突出显示,但如果您在客户端站点上,显然这并不理想!

于 2020-07-22T15:48:36.467 回答
0

在 web.config 中抛出的实际错误 Message=Unrecognized element 'providers' 因此从 web.config 文件中删除 providers 部分

于 2017-01-29T12:35:52.783 回答
0

我解决了这个问题,删除文件 machine.config 的 system.data 部分中的 DbproviderFactory,当我安装 fbclient.dll 时有一些脏数据。

C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config\machine.config C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config\machine.config

  <system.data>
    <!-- <DbProviderFactories><add name="FirebirdClient Data Provider" invariant="FirebirdSql.Data.FirebirdClient" description=".NET Framework Data Provider for Firebird" type="FirebirdSql.Data.FirebirdClient.FirebirdClientFactory, FirebirdSql.Data.FirebirdClient, Version=4.10.0.0, Culture=neutral, PublicKeyToken=3750abcc3150b00c"/><add name="FirebirdClient Data Provider" invariant="FirebirdSql.Data.FirebirdClient" description=".NET Framework Data Provider for Firebird" type="FirebirdSql.Data.FirebirdClient.FirebirdClientFactory, FirebirdSql.Data.FirebirdClient, Version=6.4.0.0, Culture=neutral, PublicKeyToken=3750abcc3150b00c"/> -->
  </system.data>
于 2020-06-25T14:43:06.653 回答
0

我的项目 Cms 中有连接字符串的重复定义。上下文类被命名为:CmsContext

就我而言,问题已解决,因为我将 Web.config 中的连接更改如下:第一个名称是 CmsContext,它与主项目有关。第二个名称是 DefaultConnection,它与 Identity 有关

<add name="CmsContext" providerName="System.Data.SqlClient" connectionString="Data Source=DESKTOP-2NQSP1P\SQLEXPRESS;  Initial Catalog=CmsDB;Integrated Security=True;" />
</connectionStrings>
于 2020-08-25T21:58:23.600 回答
0

在我的情况下,在像魅力一样工作<clear />之后添加<connectionStrings>

于 2019-06-16T06:13:49.120 回答
0

我的 WCF 服务中有连接字符串的重复定义。我能够调试服务并查看内部错误消息(默认情况下不显示):

ConfigurationErrorsException: The entry 'xxxEntities' has 
already been added. (C:\Users\WcfService\web.config line 35). 

这是在 web.config 转换之后(注意重复值)

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

因此删除不需要的连接字符串解决了我的问题。

于 2019-06-26T07:40:44.017 回答
0

我遇到了类似的问题,将 defaultConnectionFactory 更改为 SqlConnectionFactory 帮助我解决了它。

于 2016-08-12T15:05:34.283 回答
0

当您像我一样在 Nuget 包中使用不同版本的 EntityFramework 版本时,就会发生这个奇怪的错误。

首先,从 NuGet 包中卸载 Entity Framework DLL,然后清理 app.config。通过从 configSections 和实体框架元素中删除条目。

接下来,安装所需的版本。这应该可以解决问题。

于 2018-04-12T07:42:54.133 回答
0

Step 1:uninstall-package entity framework: 这个命令卸载项目中现有的Entitymanger

第 2 步:uninstall-package 实体框架:此命令将最新版本安装到项目中

最后重建项目它将运行良好

于 2021-12-22T07:26:01.230 回答
-1

检查 C:\inetpub\wwwroot 中的 C 驱动器并从中删除所有不必要的文件夹,否则从 IIS 中删除不必要的主机文件或文件夹。

于 2020-08-11T10:50:37.147 回答