【问题标题】:The provider for invariant name System.Data.SqlClient is specified multiple times多次指定不变名称 System.Data.SqlClient 的提供程序
【发布时间】:2014-01-09 12:11:00
【问题描述】:

我已将 Entity Framework 更新到 6.0,现在我遇到了一个我无法弄清楚的异常。

为 entityFramework 创建配置节处理程序时出错:在应用程序配置中多次指定了不变名称“System.Data.SqlClient”的提供程序。对于每个配置的提供程序,不变名称必须是唯一的。 (C:\inetpub\wwwroot\scrape\Scrape\web.config 第 106 行)

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

web.config 没有多次列出提供程序,我只有一个用于整个项目的 web.config。感谢您的帮助。

堆栈跟踪

在 System.Data.Entity.Internal.AppConfig.get_DefaultInstance()

在 System.Data.Entity.Internal.LazyInternalConnection..ctor(String nameOrConnectionString)

在 System.Data.Entity.DbContext..ctor(String nameOrConnectionString)

在 c:\inetpub\wwwroot\scrape\Scrape.Data\Contexts\ScabsContext.cs:line 17 中的 Scrape.Data.Contexts.ScabsContext..ctor() 处

在c:\inetpub\wwwroot\scrape\Scrape.Data\Repositories\ScabStore.cs:line 15 中的 Scrape.Data.Repositories.ScabStore..ctor() 处

在 c:\inetpub\wwwroot\scrape\Scrape\Controllers\ScabsController.cs:line 28 中的 Scrape.Api.Controllers.ScabsController.get_store() 处

在 c:\inetpub\wwwroot\scrape\Scrape\Controllers\ScabsController.cs:line 52 中的 Scrape.Api.Controllers.ScabsController.Post(Scab scab) 处

在 lambda_method(Closure , Object , Object[] )

在 System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor.c_DisplayClassc.b_6(Object instance, Object[] methodParameters)

在 System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor.Execute(Object instance, Object[] arguments)

在 System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ExecuteAsync(HttpControllerContext controllerContext, IDictionary`2 arguments, CancellationToken cancellationToken)

还有我的 web.config

<configuration>
  <configSections>
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.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="ScabContext" providerName="System.Data.SqlClient" connectionString="Data Source=bfleming-dev;Initial Catalog=scabs;User ID=scabs_dbo;Password=password" />
    <add name="lmsReadWrite" connectionString="Initial Catalog=caV2;Data Source=devsqlnow1.ca-schools.org;Network Library=dbmssocn;User Id=webuser;Password=hyqxYVTH9bjW;MultipleActiveResultSets=True;Application Name=connexus_main;" />
    <add name="lmsReadOnly" connectionString="Initial Catalog=caV2;Data Source=devsqlnow1.ca-schools.org;Network Library=dbmssocn;User Id=webuser;Password=hyqxYVTH9bjW;MultipleActiveResultSets=True;Application Name=connexus_main;" />
  </connectionStrings>
  <appSettings>
    <add key="webpages:Version" value="3.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="None" />
    <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>
    <profile defaultProvider="DefaultProfileProvider">
      <providers>
        <add name="DefaultProfileProvider" type="System.Web.Providers.DefaultProfileProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" applicationName="/" />
      </providers>
    </profile>
    <membership defaultProvider="DefaultMembershipProvider">
      <providers>
        <add name="DefaultMembershipProvider" type="System.Web.Providers.DefaultMembershipProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" applicationName="/" />
      </providers>
    </membership>
    <roleManager defaultProvider="DefaultRoleProvider">
      <providers>
        <add name="DefaultRoleProvider" type="System.Web.Providers.DefaultRoleProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" applicationName="/" />
      </providers>
    </roleManager>
    <!--
            If you are deploying to a cloud environment that has multiple web server instances,
            you should change session state mode from "InProc" to "Custom". In addition,
            change the connection string named "DefaultConnection" to connect to an instance
            of SQL Server (including SQL Azure and SQL  Compact) instead of to SQL Server Express.
      -->
    <sessionState mode="InProc" customProvider="DefaultSessionProvider">
      <providers>
        <add name="DefaultSessionProvider" type="System.Web.Providers.DefaultSessionStateProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" />
      </providers>
    </sessionState>
  </system.web>
  <system.webServer>
    <validation validateIntegratedModeConfiguration="false" />
    <handlers>
      <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
      <remove name="OPTIONSVerbHandler" />
      <remove name="TRACEVerbHandler" />
      <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
    </handlers>
  </system.webServer>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Http" publicKeyToken="31bf3856ad364e35" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-5.1.0.0" newVersion="5.1.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="EntityFramework" publicKeyToken="b77a5c561934e089" />
        <bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="WebGrease" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="0.0.0.0-1.3.0.0" newVersion="1.3.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="1.0.0.0-5.1.0.0" newVersion="5.1.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Net.Http.Formatting" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="1.0.0.0-5.1.0.0" newVersion="5.1.0.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
    <providers>
      <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
    </providers>
  </entityFramework>
</configuration>

【问题讨论】:

    标签: c# entity-framework exception


    【解决方案1】:

    尝试注释掉提供程序部分,保存并重新运行。可能与这个The type initializer for 'System.Data.Entity.Internal.AppConfig' threw an exception on a Sub Website

    有关

    【讨论】:

      【解决方案2】:

      问题是configuration/entityFramework/providers 部分有一个重复的提供程序,用于异常中指定的不变量。

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

      即使您只指定了一个,但可能发生的情况是在父目录的 .config 文件中指定了一个。由于 .config 文件从父级继承配置,因此它看到它被定义了两次。

      您可能可以安全地为此应用程序删除此提供程序。

      基于CodePlex project,此问题已在 6.1.0-alpha1 中通过忽略完全重复来“修复”。

      【讨论】:

        【解决方案3】:

        我收到此错误是因为“EntityFramework.SqlServer.dll”文件未包含在此项目的发布中。 将此 DLL 添加到 Web 服务器 bin 文件夹可解决此问题。

        【讨论】:

          【解决方案4】:

          为了解决这个问题,我将父文件夹 web.config entityFramework 部分包装为:

          &lt;location path="." inheritInChildApplications="false"&gt;

          &lt;entityFramework&gt;

          ...

          &lt;entityFramework&gt;

          &lt;/location&gt;

          https://stackoverflow.com/a/6199749/2718874

          【讨论】:

            猜你喜欢
            • 2020-03-20
            • 2014-02-06
            • 2013-08-29
            • 1970-01-01
            • 2014-03-05
            • 1970-01-01
            • 1970-01-01
            • 2021-12-03
            相关资源
            最近更新 更多