C# 实体框架的Oracle数据库连接

C# 实体框架的Oracle数据库连接,c#,oracle,entity-framework-6,identity,C#,Oracle,Entity Framework 6,Identity,我正在尝试在我的Web API服务中进行基于令牌的授权,并计划在我的Oracle数据库中存储标识表 我知道有两种访问数据库的方法-通过Oracle ManagedDataAccess或Oracle DataAccess。我已经下载了Entity Framework 6的托管版本 以下是我的web配置的一部分: (我已经修改了凭据和字符串路径,只需假设它们是正确的,并且我可以在没有实体框架的情况下连接,但只能使用非托管DataAccess) 所以。。。在ManagedDataAccess中使用连接

我正在尝试在我的Web API服务中进行基于令牌的授权,并计划在我的Oracle数据库中存储标识表

我知道有两种访问数据库的方法-通过Oracle ManagedDataAccess或Oracle DataAccess。我已经下载了Entity Framework 6的托管版本

以下是我的
web配置的一部分:

(我已经修改了凭据和字符串路径,只需假设它们是正确的,并且我可以在没有实体框架的情况下连接,但只能使用非托管DataAccess)

所以。。。在ManagedDataAccess中使用连接字符串时:

<add name="Test" 
     providerName="Oracle.ManagedDataAccess.Client" 
     connectionString="User Id=login;Password=pass;Data Source=Test" />

我得到了一个错误:

ORA-12154:TNS:无法解析指定的连接标识符

当我转向非托管版本时,如下所示:

<add name="Test" 
     providerName="Oracle.DataAccess.Client" 
     connectionString="User Id=login;Password=pass;Data Source=Test" />

我收到一个错误,Entity Framework找不到任何名为
Oracle.DataAccess.Client
dbContext

在我的其他项目中,我使用的是
Oracle.ManagedDataAccess.Client
,但在我的连接字符串中键入
Oracle.DataAccess.Client
,而且效果很好

一个简单的问题-如何使用EF6连接到Oracle?通过托管和非托管数据访问?(因为非托管框架没有nuget
版本)

我没有一个明确的答案给你,但下面可能有助于找到根本原因

Oracle.ManagedDataAccess.Client
Oracle.DataAccess.Client
使用不同的方法来解析TNS别名,我认为存在问题

Oracle.ManagedDataAccess.Client
检查以下内容:

  • .NET配置文件中
    部分下
    数据源
    部分的数据源别名(即
    machine.config
    web.config
    user.config
  • tnsnames.ora
    文件中的数据源别名,位于.NET配置文件中的
    TNS_ADMIN
    指定的位置。位置可以由绝对或相对目录路径组成
  • tnsnames.ora
    文件中的数据源别名与
    .exe
    位于同一目录中
  • Oracle.DataAccess.Client
    正在以下位置查找
    tnsnames.ora
    文件:

  • 环境变量
    TNS\u ADMIN
  • 注册表值
    HKLM\SOFTWARE\ORACLE\KEY{ORACLE\u Home\u Name}\TNS\u ADMIN
    ,分别为<代码>HKLM\SOFTWARE\Wow6432Node\ORACLE\KEY{ORACLE\u Home\u Name}\TNS\u ADMIN
  • 文件夹
    %ORACLE\u HOME%\network\admin
  • 当前目录(可能与应用程序所在的目录不同)
  • 应用程序所在的文件夹
  • <add name="Test" 
         providerName="Oracle.ManagedDataAccess.Client" 
         connectionString="User Id=login;Password=pass;Data Source=Test" />
    
    <add name="Test" 
         providerName="Oracle.DataAccess.Client" 
         connectionString="User Id=login;Password=pass;Data Source=Test" />