首页 > 解决方案 > 如何使用 Entity Framework 和 Oracle Managed Data Access 连接到 Oracle 数据库?

问题描述

我想使用 Entity Framework 6.1.3 版连接到 Oracle 数据库。我正在使用Oracle Managed Data Acces19.5.0 版中的 Nuget 包和Oracle Managed Data Access Entity Framework19.3.0 版中的 Nuget 包。我也在使用 Visual Studio 2019。我想使用ADO .NETVS 中的选项从数据库表中创建实体,但是当我尝试使用此选项并单击 时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 DatabaseOracle Developer Tools for Visual Studio

标签: c#.netoracleentity-framework

解决方案


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

编辑 现在有用于 Visual Studio 2019 的 ODAC 驱动程序


推荐阅读