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