entity framework:提供程序未返回providermanifest实例

entity framework6.0.1我的App.config:

    

和使用EF的MyDataContext类:

 public partial class MyDataContext: DbContext { static MyDataContext() { Database.SetInitializer(null); } public MyDataContext() : base("MyDataContext") { } } 

创建了一个上下文,但当我尝试获取任何实体或对数据库执行任何操作时,它会抛出exception

 using (var db = new MyDataContext()) { var exists = db.Database.Exists(); } 

例外是

 System.Data.ProviderIncompatibleException: The provider did not return a providermanifest instance StackTrace: in System.Data.Common.DbProviderServices.GetProviderManifest(String manifestToken) in System.Data.Entity.ModelConfiguration.Utilities.DbConnectionExtensions.GetProviderInfo(DbConnection connection, DbProviderManifest& providerManifest) in System.Data.Entity.DbModelBuilder.Build(DbConnection providerConnection) in System.Data.Entity.Internal.LazyInternalContext.CreateModel(LazyInternalContext internalContext) in System.Data.Entity.Internal.RetryLazy`2.GetValue(TInput input) in System.Data.Entity.Internal.LazyInternalContext.InitializeContext() in System.Data.Entity.Internal.InternalContext.CreateObjectContextForDdlOps() in System.Data.Entity.Database.Exists() 

内部exception:

 System.Configuration.ConfigurationErrorException: Configuration system failed to initialize StackTrace: в System.Configuration.ClientConfigurationSystem.OnConfigRemoved(Object sender, InternalConfigEventArgs e) в System.Configuration.Internal.InternalConfigRoot.RemoveConfigImpl(String configPath, BaseConfigurationRecord configRecord) в System.Configuration.BaseConfigurationRecord.GetSectionRecursive(String configKey, Boolean getLkg, Boolean checkPermission, Boolean getRuntimeObject, Boolean requestIsHere, Object& result, Object& resultRuntimeObject) в System.Configuration.BaseConfigurationRecord.GetSection(String configKey) в System.Configuration.ConfigurationManager.GetSection(String sectionName) в System.Xml.Schema.Parser..ctor(SchemaType schemaType, XmlNameTable nameTable, SchemaNames schemaNames, ValidationEventHandler eventHandler) в System.Xml.Schema.XmlSchema.Read(XmlReader reader, ValidationEventHandler validationEventHandler) в System.Data.Entity.Core.SchemaObjectModel.Schema.SomSchemaSetHelper.AddXmlSchemaToSet(XmlSchemaSet schemaSet, XmlSchemaResource schemaResource, HashSet`1 schemasAlreadyAdded) в System.Data.Entity.Core.SchemaObjectModel.Schema.SomSchemaSetHelper.ComputeSchemaSet(SchemaDataModelOption dataModel) в System.Data.Entity.Core.Common.Utils.Memoizer`2.c__DisplayClass2.b__0() в System.Data.Entity.Core.Common.Utils.Memoizer`2.Result.GetValue() в System.Data.Entity.Core.Common.Utils.Memoizer`2.Evaluate(TArg arg) в System.Data.Entity.Core.SchemaObjectModel.Schema.SomSchemaSetHelper.GetSchemaSet(SchemaDataModelOption dataModel) в System.Data.Entity.Core.SchemaObjectModel.Schema.CreateXmlReaderSettings() в System.Data.Entity.Core.SchemaObjectModel.Schema.Parse(XmlReader sourceReader, String sourceLocation) в System.Data.Entity.Core.SchemaObjectModel.SchemaManager.ParseAndValidate(IEnumerable`1 xmlReaders, IEnumerable`1 sourceFilePaths, SchemaDataModelOption dataModel, AttributeValueNotification providerNotification, AttributeValueNotification providerManifestTokenNotification, ProviderManifestNeeded providerManifestNeeded, IList`1& schemaCollection) в System.Data.Entity.Core.SchemaObjectModel.SchemaManager.ParseAndValidate(IEnumerable`1 xmlReaders, IEnumerable`1 sourceFilePaths, SchemaDataModelOption dataModel, DbProviderManifest providerManifest, IList`1& schemaCollection) в System.Data.Entity.Core.SchemaObjectModel.SchemaManager.LoadProviderManifest(XmlReader xmlReader, String location, Boolean checkForSystemNamespace, Schema& schema) в System.Data.Entity.Core.Common.DbXmlEnabledProviderManifest.Load(XmlReader reader) в System.Data.Entity.Core.Common.DbXmlEnabledProviderManifest..ctor(XmlReader reader) в System.Data.Entity.SqlServer.SqlProviderManifest..ctor(String manifestToken) в System.Data.Entity.SqlServer.SqlProviderServices.GetDbProviderManifest(String versionHint) в System.Data.Entity.Core.Common.DbProviderServices.GetProviderManifest(String manifestToken) and it with inner exception: System.Configuration.ConfigurationErrorException: Unknown configuration section userSettings. (C:\\Users\\Tema\\AppData\\Local\\Mgr\\Mgr.vshost.exe_Url_slqi2aqp0duilazpy21vojhl3ssnjluh\\1.0.0.0\\user.config line 3) StackTrace: в System.Configuration.ConfigurationSchemaErrors.ThrowIfErrors(Boolean ignoreLocal) в System.Configuration.BaseConfigurationRecord.ThrowIfParseErrors(ConfigurationSchemaErrors schemaErrors) в System.Configuration.ClientConfigurationSystem.OnConfigRemoved(Object sender, InternalConfigEventArgs e) 

也许有人遇到过这个问题? 谢谢。

如果数据库的登录信息无效或者未找到服务器或位于防火墙后面(基本上,您的程序无法连接到数据库),则可能抛出此exception。 通常它会附带一个内部exception,它会告诉您更多有关发生的事情。 一定要检查一下。 这个错误可能还有其他原因,但我认为这是最有可能的。

另外,您使用的是SQL还是Windows身份validation? 如果您正在使用SQL身份validation,请尝试将integrated security=False添加到您的连接字符串中。

在我的情况下,我不得不破解.EDMX文件并更改ProviderManifestToken =“2008”

  1. 在编辑器中打开Model.edmx
  2. 将ProviderManifestToken =“2012”更改为ProviderManifestToken =“2008”

Model.edmx hack

从2012年和2008年更改了ProviderManifestToken属性值,并且一切正常。

请记住将.edmx文件作为XML文件打开