具有不变名称“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(IEnumerable
1 xmlReaders, IEnumerable
1 filePaths,布尔 throwOnError,IDbDependencyResolver 解析器,DbProviderManifest& providerManifest,DbProviderFactory& providerFactory,String&providerInvariantName,String&providerManifestToken,Memoizer2& cachedCTypeFunction) at System.Data.Entity.Core.Metadata.Edm.StoreItemCollection..ctor(IEnumerable
1 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(IEnumerable
1 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.RetryAction
1.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.InternalSet
1.Initialize() 在 System.Data.Entity.Internal.Linq.InternalSet1.get_InternalContext() at System.Data.Entity.Infrastructure.DbQuery
1.System.Linq.IQueryable.get_Provider() 在 System.Linq.Queryable.FirstOrDefault[TSource](IQueryable1 source, Expression
1 谓词) 在 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, IDictionary
2 参数) 在 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, Func
1 继续) 在 System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter 过滤器,ActionExecutingContext preContext,Func1 continuation) at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func
1 继续) 在 System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodWithFilters(ControllerContext controllerContext, IList1 filters, ActionDescriptor actionDescriptor, IDictionary
2 参数) 在 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 提供程序未在机器或应用程序配置文件中注册