可以生成EDMX但不能在Oracle DB上运行查询

时间:2014-04-09 16:18:43

标签: c# entity-framework odp.net

我无法在Visual Studio 2013,.NET 4.0上使用我的Oracle DB工作EF。

这就是我所做的:

  • 已安装ODTwithODAC121012(我之前已安装过ODAC1120320_x64)
  • 成功设置新连接
  • 成功生成了我的数据库的edmx(我选择了EF5)

这是我的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=&quot;data source=BWKBX;password=BWKBX;persist security info=True;user id=BWKBX&quot;" 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: 

提前谢谢。

2 个答案:

答案 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>