不止一次指定了不变名称为System.Data.SqlClient的提供程序

12
我已将Entity Framework升级到6.0,现在我遇到了一个异常,但是我无法解决它。

创建实体框架的配置节处理程序时发生错误:在应用程序配置中多次指定了不变名称“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 的 Scrape.Data.Contexts.ScabsContext..ctor() 行17

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

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

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

在 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>
4个回答

26

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

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

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

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

根据CodePlex项目,通过忽略完全重复项,在6.1.0-alpha1中已经“修复”了此问题。


3

0
为了解决这个问题,我用以下代码包装了父文件夹 web.config 的 entityFramework 部分:

<location path="." inheritInChildApplications="false">

<entityFramework>

...

<entityFramework>

</location>

请参见 https://dev59.com/_2025IYBdhLWcg3wKCb-#6199749

0
我之前遇到了这个错误,因为“EntityFramework.SqlServer.dll”文件没有被包含在此项目的发布中。 将此DLL添加到Web服务器bin文件夹中解决了这个问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接