实体框架:提供者未返回提供者清单实例
Posted
技术标签:
【中文标题】实体框架:提供者未返回提供者清单实例【英文标题】:Entity Framework: The provider did not return a providermanifest instance 【发布时间】:2013-11-03 16:40:11 【问题描述】:实体框架 6.0.1 我的 App.config:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</configSections>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0" />
</startup>
<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>
<connectionStrings>
<add name="MyDataContext" connectionString="Data Source=MyDb;Initial Catalog=mycatalog;Persist Security Info=True;User ID=admin;Password=123;MultipleActiveResultSets=True"
providerName="System.Data.SqlClient" />
</connectionStrings>
</configuration>
还有 MyDataContext
使用 EF 的类:
public partial class MyDataContext: DbContext
static MyDataContext()
Database.SetInitializer<MyDataContext>(null);
public MyDataContext()
: base("MyDataContext")
创建了一个上下文,但是当我尝试获取任何实体或对数据库执行任何操作时,它会抛出异常
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()
内部异常:
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.<Evaluate>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)
也许有人遇到过这个问题?谢谢。
【问题讨论】:
我刚刚用 UserSettingsC:\\Users\\Tema\\AppData\\Local\\Mgr\\Mgr.vshost.exe_Url_slqi2aqp0duilazpy21vojhl3ssnjluh\\1.0.0.0\\user.config
删除了文件,它解决了我的问题
【参考方案1】:
就我而言,我不得不破解 .EDMX 文件并更改 ProviderManifestToken="2008"
-
在编辑器中打开您的 Model.edmx
将 ProviderManifestToken="2012" 更改为 ProviderManifestToken="2008"
【讨论】:
这对我有用。谢谢!你到底是怎么想出来的? 太棒了。这行得通。 :) 非常感谢!我也想知道你是怎么想出来的!! 这对我也有用,这个问题有解释吗? 这对我也有用。这发生在我从 EF6 降级到 EF5 时,所以我认为它一定是那些没有得到纠正的杂散代码行之一。 当我有一个针对最新 EF 的项目时,最新的 EF 为 5,这也发生在我身上。当 EF 静默升级到 6 时,该项目继续工作,但是当模型从数据库。在我们的例子中,ProviderManifestToken 是“2012.Azure”,我首先尝试了“2008.Azure”,但没有成功; “2008”确实如此。【参考方案2】:如果数据库的登录信息无效,或者找不到服务器或位于防火墙后面(基本上,您的程序无法连接到数据库),则可能会引发此异常。通常它带有一个内部异常,它会告诉你更多关于发生了什么。请务必检查这一点。这个错误可能还有其他原因,但我认为这是最有可能的。
另外,您使用的是 SQL 还是 Windows 身份验证?如果您使用 SQL 身份验证,请尝试将 integrated security=False
添加到您的连接字符串。
【讨论】:
感谢您的回复,我正在使用 SQL 身份验证并尝试使用integrated security=False
但我总是收到此错误
您确定您的连接字符串中的data source=
正确吗? MyDb
听起来像数据库名称,但这应该是计算机的名称和服务器的实例(类似于 mydbserver\sqlexpress
)。此外,尝试使用相同的凭据连接到数据库,并使用 SQL Server Management Studio 之类的工具从同一台计算机连接到数据库。如果这不起作用,这可能永远不会。
我确定,我通过服务器资源管理器连接到 db 并复制了 ConnectionString,然后为这个问题更改了 servername\dbname\login\password..
有内部异常吗?您应该不必更改您刚刚提到的任何内容,它们不是已经在您复制的连接字符串中了吗?
对不起,我错了:它有一个内部异常Configuration system failed to initialize
【参考方案3】:
更改了 2012 年和 2008 年的 ProviderManifestToken 属性值,一切正常。
记得将 .edmx 文件作为 XML 文件打开
【讨论】:
【参考方案4】:如果您希望将 ProviderManifestToken
设置为 2012,请检查 UseLegacyProvider
的值并确保将其设置为 False。
【讨论】:
【参考方案5】:在我的例子中,我使用 Oracle 和 Oracle.ManagedDataAccess.EntityFramework.dll
,
而我用12.2.20190115
版本可以解决这个问题:https://www.nuget.org/packages/Oracle.ManagedDataAccess.EntityFramework/12.2.20190115
可以尝试检查dll的版本是否正确。
【讨论】:
以上是关于实体框架:提供者未返回提供者清单实例的主要内容,如果未能解决你的问题,请参考以下文章
TeamCity 中的 EF6 和 MSTest:实体框架提供程序必须从此类继承,并且“实例”成员必须返回单例实例
“提供者没有返回 ProviderManifestToken 字符串”带有实体框架的 MySQL