【问题标题】:How can I connect to a Oracle Database using Entity Framework and Oracle Managed Data Access?如何使用 Entity Framework 和 Oracle Managed Data Access 连接到 Oracle 数据库?
【发布时间】:2019-11-21 19:09:48
【问题描述】:

我想使用 Entity Framework 6.1.3 版连接到 Oracle 数据库。我正在使用 19.5.0 版本的 Nuget 的 Oracle Managed Data Acces 包和 19.3.0 的 Oracle Managed Data Access Entity Framework Nuget 包。我也在使用 Visual Studio 2019。 我想在 VS 中使用 ADO .NET 选项从数据库表中创建实体,但是当我尝试使用此选项并单击 Code First from database option 时,它没有显示与 Oracle 数据库的任何连接。 我有这样的 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"/>
    <section name="oracle.manageddataaccess.client"
      type="OracleInternal.Common.ODPMSectionHandler, Oracle.ManagedDataAccess, Version=4.122.19.1, Culture=neutral, PublicKeyToken=89b483f429c47342"/>
  </configSections>
  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
      <parameters>
        <parameter value="v13.0"/>
      </parameters>
    </defaultConnectionFactory>
    <providers>
      <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer"/>
      <provider invariantName="Oracle.ManagedDataAccess.Client"
        type="Oracle.ManagedDataAccess.EntityFramework.EFOracleProviderServices, Oracle.ManagedDataAccess.EntityFramework, Version=6.122.19.1, Culture=neutral, PublicKeyToken=89b483f429c47342"/>
    </providers>
  </entityFramework>
  <system.data>
    <DbProviderFactories>
      <remove invariant="Oracle.ManagedDataAccess.Client"/>
      <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.122.19.1, Culture=neutral, PublicKeyToken=89b483f429c47342"/>
    </DbProviderFactories>
  </system.data>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <publisherPolicy apply="no"/>
        <assemblyIdentity name="Oracle.ManagedDataAccess" publicKeyToken="89b483f429c47342" culture="neutral"/>
        <bindingRedirect oldVersion="4.121.0.0 - 4.65535.65535.65535" newVersion="4.122.19.1"/>
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
  <oracle.manageddataaccess.client>
    <version number="*">
      <dataSources>
        <dataSource alias="SampleDataSource" descriptor="(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=ORCL))) "/>
      </dataSources>
    </version>
  </oracle.manageddataaccess.client>
  <connectionStrings>
    <add name="OracleDbContext" providerName="Oracle.ManagedDataAccess.Client"
      connectionString="User Id=user;Password=password;Data Source=oracle"/>
  </connectionStrings>
</configuration>

我不知道问题是来自这个文件还是来自其他部分。我还尝试创建一个新的Data Connection,但是当我选择Oracle Database 选项时,它说提供程序已被弃用,我必须安装Oracle Developer Tools for Visual Studio。我也下载了这个,没有任何变化。我该如何解决这个问题?

【问题讨论】:

  • 你安装Odac Client了吗?
  • @SelimYıldız 不,我没有。我必须吗?
  • 是的,你必须这样做。可以关注教程Entity Framework, LINQ and Model-First for the Oracle Database
  • @SelimYıldız 但是我用的是Visual Studio 2019版本,没有问题吗?即使我参考了 OracleManagedDataAccess,我也必须下载这个?
  • @SelimYıldız 我已经下载并安装了 ODAC。还是不行。

标签: c# .net oracle entity-framework


【解决方案1】:

我采取的解决方案是卸载 VS 2019 并开始使用 VS 2017。这是因为 ODAC 驱动程序仅与 VS 2017 及更早版本兼容。完成此操作后,我可以选择使用 Server Explorer 部分中的 ODP .NET 驱动程序创建数据库,该部分位于 View -> Server Explorer -> Right Click in Data Connections -> Add Connection

编辑 现在有可与 Visual Studio 2019 配合使用的 ODAC 驱动程序

【讨论】:

    猜你喜欢
    • 2021-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多