具有不变名称“System.Data.SqlServerCe.4.0”的 ADO.NET 提供程序未注册

Posted

技术标签:

【中文标题】具有不变名称“System.Data.SqlServerCe.4.0”的 ADO.NET 提供程序未注册【英文标题】:The ADO.NET provider with invariant name 'System.Data.SqlServerCe.4.0' is either not registered 【发布时间】:2015-12-14 16:56:09 【问题描述】:

我们正在尝试将 MVC 解决方案部署给客户,但他们在尝试登录时遇到错误。

我已经搜索过类似的问题,但还没有找到解决方案。

它确实安装了 SQL CE 4.0。

我已经检查了 app.config,但看起来还不错。它具有建议的行here

有人能解释一下下面的错误日志吗?

2015-10-05 09:59:54,259 [34] 致命 - [] 捕获异常 System.Data.DataException:初始化数据库时发生异常。有关详细信息,请参阅 InnerException。 ---> System.Data.Entity.Core.MetadataException:指定的架构无效。错误: (0,0):错误 0175:具有不变名称“System.Data.SqlServerCe.4.0”的 ADO.NET 提供程序未在计算机或应用程序配置文件中注册,或者无法加载。有关详细信息,请参阅内部异常。 在 System.Data.Entity.Core.Metadata.Edm.StoreItemCollection.Loader.ThrowOnNonWarningErrors() 在 System.Data.Entity.Core.Metadata.Edm.StoreItemCollection.Init(IEnumerable1 xmlReaders, IEnumerable1 filePaths,布尔 throwOnError,IDbDependencyResolver 解析器,DbProviderManifest& providerManifest,DbProviderFactory& providerFactory,String&providerInvariantName,String&providerManifestToken,Memoizer2& cachedCTypeFunction) at System.Data.Entity.Core.Metadata.Edm.StoreItemCollection..ctor(IEnumerable1 xmlReaders) 在 System.Data.Entity.Utilities.XDocumentExtensions.GetStorageMappingItemCollection(XDocument 模型、DbProviderInfo&providerInfo) 在 System.Data.Entity.Migrations.Infrastructure.EdmModelDiffer.Diff(XDocument sourceModel,XDocument targetModel,Lazy1 modificationCommandTreeGenerator, MigrationSqlGenerator migrationSqlGenerator, String sourceModelVersion, String targetModelVersion) at System.Data.Entity.Migrations.DbMigrator.IsModelOutOfDate(XDocument model, DbMigration lastMigration) at System.Data.Entity.Migrations.DbMigrator.Upgrade(IEnumerable1 pendingMigrations,字符串 targetMigrationId,字符串 lastMigrationId) 在 System.Data.Entity.Migrations.DbMigrator.EnsureDatabaseExists(操作 mustSucceedToKeepDatabase) 在 System.Data.Entity.MigrateDatabaseToLatestVersion2.InitializeDatabase(TContext context) at System.Data.Entity.Internal.InternalContext.PerformInitializationAction(Action action) --- End of inner exception stack trace --- at System.Data.Entity.Internal.InternalContext.PerformInitializationAction(Action action) at System.Data.Entity.Internal.InternalContext.PerformDatabaseInitialization() at System.Data.Entity.Internal.RetryAction1.PerformAction(TInput 输入) 在 System.Data.Entity.Internal.LazyInternalContext.InitializeDatabaseAction(Action1 action) at System.Data.Entity.Internal.InternalContext.GetEntitySetAndBaseTypeForType(Type entityType) at System.Data.Entity.Internal.Linq.InternalSet1.Initialize() 在 System.Data.Entity.Internal.Linq.InternalSet1.get_InternalContext() at System.Data.Entity.Infrastructure.DbQuery1.System.Linq.IQueryable.get_Provider() 在 System.Linq.Queryable.FirstOrDefault[TSource](IQueryable1 source, Expression1 谓词) 在 TWP.Areas.Core.Models.Authorization.DatabaseMembershipProvider.ValidateUser(字符串用户名,字符串密码) 在 TWP.Areas.Core.Models.Account.AccountProvider.Logon(TwpMembershipProvider 成员资格,LogOnViewModel 模型) 在 TWP.Areas.Core.Controllers.AccountController.LogOn(LogOnViewModel 模型,字符串 returnUrl) 在 lambda_method(闭包,ControllerBase,对象 []) 在 System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext 控制器上下文,IDictionary2 parameters) at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary2 参数) 在 System.Web.Mvc.ControllerActionInvoker.c__DisplayClass15.b__12() 在 System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter 过滤器,ActionExecutingContext preContext,Func1 continuation) at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func1 继续) 在 System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter 过滤器,ActionExecutingContext preContext,Func1 continuation) at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func1 继续) 在 System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodWithFilters(ControllerContext controllerContext, IList1 filters, ActionDescriptor actionDescriptor, IDictionary2 参数) 在 System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName)

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=152368
  -->
<configuration>
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
    <section name="twpSettings" type="TWP.Areas.Core.Models.Settings.TwpSettingsSection, TWP"/>
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false"/>
  </configSections>
  <!-- Path to the configuration file for custom TWP settings -->
  <twpSettings configSource="Config\Twp.config"/>
  <appSettings>
    <!-- Setting for increasing the max size of http requests -->
    <add key="aspnet:MaxHttpCollectionKeys" value="10000"/>
    <!-- Path to the configuration file for log4net -->
    <add key="log4net.Config" value="Config\log4net.config"/>
    <add key="ClientValidationEnabled" value="true"/>
    <add key="UnobtrusivejavascriptEnabled" value="true"/>
  </appSettings>
  <connectionStrings>
    <add name="ADConnectionString1" connectionString="xxxxxx,OU=xxxxxx,DC=xxxxxx,DC=xxx"/>
    <add name="TWPConnectionString" connectionString="Data Source=xxxxxx;Initial Catalog=xxxxxxxxx;Persist Security Info=True;User ID=xxxxxxxxxx;Password=xxxxxxxxxxxxxxx" providerName="System.Data.SqlClient"/>
  </connectionStrings>
  <system.web>
    <customErrors mode="Off"/>
    <compilation debug="false" targetFramework="4.0">
      <assemblies>
        <add assembly="System.Web.Abstractions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
        <add assembly="System.Web.Helpers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
        <add assembly="System.Web.Routing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
        <add assembly="System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
        <add assembly="System.Web.WebPages, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
      </assemblies>
    </compilation>
    <!-- Default culture -->
    <globalization uiCulture="en-GB" culture="en-GB"/>
    <authentication mode="Forms">
      <forms loginUrl="~/Core/Account/LogOn" 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.Routing"/>
        <add namespace="System.Web.WebPages"/>
        <add namespace="TWP.Areas.Core.Models"/>
      </namespaces>
    </pages>
    <httpRuntime maxRequestLength="10240"/>
  </system.web>
  <system.webServer>
    <validation validateIntegratedModeConfiguration="false"/>
    <modules runAllManagedModulesForAllRequests="true"/>
  </system.webServer>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
            <dependentAssembly>
                <assemblyIdentity name="System.Web.WebPages" publicKeyToken="31BF3856AD364E35" culture="neutral"/>
                <bindingRedirect oldVersion="0.0.0.0-2.0.0.0" newVersion="1.0.0.0"/>
            </dependentAssembly>
            <dependentAssembly>
                <assemblyIdentity name="System.Web.WebPages.Deployment" publicKeyToken="31BF3856AD364E35" culture="neutral"/>
                <bindingRedirect oldVersion="0.0.0.0-2.0.0.0" newVersion="1.0.0.0"/>
            </dependentAssembly>
            <dependentAssembly>
                <assemblyIdentity name="System.Web.Razor" publicKeyToken="31BF3856AD364E35" culture="neutral"/>
                <bindingRedirect oldVersion="0.0.0.0-2.0.0.0" newVersion="2.0.0.0"/>
            </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35"/>
        <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="3.0.0.0"/>
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
  <system.serviceModel>
    <!-- Clients -->
    <client>
        (removed)
    </client>
    <!-- Services -->
    <services>
        (removed)
    </services>
    <!-- Service Hosting Environment -->
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true"/>
    <!-- Bindings -->
    <bindings>
      <wsHttpBinding>
        <binding name="wsHttpBinding_DccWcfLibrary" closeTimeout="00:00:10" openTimeout="00:00:10" sendTimeout="00:00:10" maxReceivedMessageSize="4194304" />
      </wsHttpBinding>
      <webHttpBinding>
        <binding name="webHttpBinding_Large" maxReceivedMessageSize="1655360">
          <readerQuotas maxDepth="32" maxStringContentLength="163840" maxArrayLength="163840" maxBytesPerRead="4096" maxNameTableCharCount="16384" />
          <security mode="None" />
        </binding>
      </webHttpBinding>
    </bindings>
    <!-- Behaviors -->
    <behaviors>
      <serviceBehaviors>
        <behavior name="">
          <serviceMetadata httpGetEnabled="true"/>
          <serviceDebug includeExceptionDetailInFaults="true"/>
        </behavior>
      </serviceBehaviors>
      <endpointBehaviors>
        <behavior name="geocodingBehavior">
          <webHttp/>
        </behavior>
      </endpointBehaviors>
    </behaviors>
  </system.serviceModel>
  <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>

【问题讨论】:

你需要检查 web.config,而不是 app.config - 然后建议你分享你的 web.config 谢谢。 Web.config 现在已添加到原始帖子中。 您需要 EntityFramework.SqlServerCompact 包在您的 web.config 中添加的配置设置 我不明白。您是说 web.config 中缺少 SQL CE 吗? “providerName="System.Data.SqlClient"” 不应该适用于 SQL CE 吗? 是的,这就是我要说的 - 尝试在新项目中安装该包,因为检查 web/app.config 和 System.Data.SqlClient 是用于 SQL Server,而不是用于 SQL Compact ,它需要:“System.Data.SqlServerCe” 【参考方案1】:

我不确定 SQL CE 4.0 出了什么问题,但重新安装它可以解决问题。

【讨论】:

以上是关于具有不变名称“System.Data.SqlServerCe.4.0”的 ADO.NET 提供程序未注册的主要内容,如果未能解决你的问题,请参考以下文章

找不到具有不变名称“System.Data.SqlClient”的 ADO.NET 提供程序的实体框架提供程序。

找不到具有不变名称“System.Data.SqlClient”的 ADO.NET 提供程序的实体框架提供程序。

找不到具有不变名称“System.Data.SqlClient”的 ADO.NET 提供程序的实体框架提供程序

错误:找不到具有不变名称“System.Data.SqlClient”的 ADO.NET 提供程序的实体框架提供程序

具有不变名称“MySql.Data.MySqlClient”的 ADO.NET 提供程序未在机器或应用程序配置文件中注册

一对多级联删除沿多对多导致异常