我无法在Visual Studio 2013,.NET 4.0上使用我的Oracle DB工作EF。
这就是我所做的:
这是我的app.config:
<configSections>
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=4.4.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</configSections>
<connectionStrings>
<add name="Entities" connectionString="metadata=res://*/Entity.PVModel.csdl|res://*/Entity.PVModel.ssdl|res://*/Entity.PVModel.msl;provider=Oracle.ManagedDataAccess.Client;provider connection string="data source=BWKBX;password=BWKBX;persist security info=True;user id=BWKBX"" providerName="System.Data.EntityClient" />
</connectionStrings>
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
</entityFramework>
在我的代码中,当我可以实例化我的DbContext但我无法运行如下查询:
db.MY_TABLE_SET.Where(p => p.FOO == "FOO").ToList();
这是我得到的错误:
System.ArgumentException was unhandled by user code
HResult=-2147024809
Message=Soit le fournisseur de magasins spécifié est introuvable dans la configuration, soit il n'est pas valide.
Source=System.Data.Entity
StackTrace:
à System.Data.EntityClient.EntityConnection.GetFactory(String providerString)
à System.Data.EntityClient.EntityConnection.ChangeConnectionString(String newConnectionString)
à System.Data.Entity.Internal.LazyInternalConnection.InitializeFromConnectionStringSetting(ConnectionStringSettings appConfigConnection)
à System.Data.Entity.Internal.LazyInternalConnection.TryInitializeFromAppConfig(String name, AppConfig config)
à System.Data.Entity.Internal.LazyInternalConnection.Initialize()
à System.Data.Entity.Internal.LazyInternalConnection.CreateObjectContextFromConnectionModel()
à System.Data.Entity.Internal.LazyInternalContext.InitializeContext()
à System.Data.Entity.Internal.InternalContext.Initialize()
à System.Data.Entity.Internal.InternalContext.GetEntitySetAndBaseTypeForType(Type entityType)
à System.Data.Entity.Internal.Linq.InternalSet`1.Initialize()
à System.Data.Entity.Internal.Linq.InternalSet`1.get_InternalContext()
à System.Data.Entity.Infrastructure.DbQuery`1.System.Linq.IQueryable.get_Provider()
à System.Linq.Queryable.Where[TSource](IQueryable`1 source, Expression`1 predicate)
à OBS.SCAV.AdminKpiBox.Tests.TestVisualizeService.TestOneEnd() dans d:\Workspace\SCAV\G1R1 (DEV)\Web Service\AdminKpiBox\OBS.SCAV.AdminKpiBox.Tests\TestPeriodValidation.cs:ligne 30
InnerException: System.ArgumentException
HResult=-2147024809
Message=Le fournisseur de données .Net Framework demandé est introuvable. Il n'est peut-être pas installé.
Source=System.Data.Entity
StackTrace:
à System.Data.EntityClient.EntityConnection.GetFactory(String providerString)
InnerException:
提前谢谢。
答案 0 :(得分:1)
一旦你知道英语中的错误是什么,你可能会有更好的运气搜索:
&#34;在配置中找不到指定的商店提供商,或者无效&#34;
此外,&#34;无法找到请求的.Net Framework数据提供程序。它可能没有安装。&#34;
确保正确安装。如果您的应用程序目标是32位,请确保运行的configure.bat为32位..如果它是64位,请确保运行configure.bat为64位。请理解Oracle.DataAccess.Client是不受管理的,这意味着&#34; bitness&#34;的事项。
答案 1 :(得分:0)
我终于找到了。
我不知道为什么但似乎Oracle安装程序(或其他)没有在我的machine.config中注册EF所需的DbProviderFactory,在x64文件夹中(C:\ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \配置)。
但它是在x86文件夹(C:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ Config)中注册的。我只是将x86文件中的行复制/粘贴到x64文件中。
文件中的位置是:
<system.data>
<DbProviderFactories>
<add name="ODP.NET, Managed Driver" invariant="Oracle.ManagedDataAccess.Client" description="Oracle Data Provider for .NET, Managed Driver" type="Oracle.ManagedDataAccess.Client.OracleClientFactory, Oracle.ManagedDataAccess, Version=4.121.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />
[...]
</DbProviderFactories>
</system.data>