我有一个小的asp.net core 2.2应用程序,应该访问一个oracle数据库;我正在使用NuGet Oracle.ManagedDataAccess.Core(2.18.6),它仅在我的计算机上工作。
当我使用IIS将其部署到Windows服务器时,我将一个tnsnames.ora
文件放在应用程序的目录中,再次它可以正常工作。
现在,我要使用共享的tnsnames.ora
文件。我已经尝试过像下面这样web.config
(来自StackOverflow / Google对类似问题的回答的答案)。
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<section name="oracle.manageddataaccess.client" type="OracleInternal.Common.ODPMSectionHandler, Oracle.ManagedDataAccess, Culture=neutral, PublicKeyToken=89b483f429c47342"/>
</configSections>
<!-- skipping app stuff -->
<oracle.manageddataaccess.client>
<version number="*">
<settings>
<setting name="tns_admin" value="F:\path\to\tnsadmin\folder" />
</settings>
</version>
</oracle.manageddataaccess.client>
</configuration>
不幸的是,这是行不通的(并且由于Oracle.ManagedDataAccess.dll
的Core版本没有ODPMSectionHandler
类,所以这并不奇怪)。
那么,有没有办法与odp.net核心共享tnsnames.ora
文件?
(PS imo,我们需要odp.net-core
标签)
更新
需要确保w3wp.exe
可以实际访问文件。
设置系统环境变量TNS_ADMIN
是可行的解决方案。在这种情况下就足够了,但是我仍然很好奇如何通过web.config
进行配置。
答案 0 :(得分:0)
ODP.NET Core不像标准ODP.NET那样支持配置文件。您将需要使用配置API:
答案 1 :(得分:0)
使用Oracle.ManagedDataAccess,您不需要使用tnsnames.ora文件。实际上,您不需要在Web服务器上安装Oracle客户端。使用startup.cs。
public void ConfigureServices(IServiceCollection services)
{
services.AddEntityFrameworkOracle()
.AddDbContext<OracleDbContext>(builder => builder.UseOracle(Configuration["Data:OracleDbContext"]),ServiceLifetime.Scoped)
.AddDbContext<AppsDbContext>(option => option.UseOracle(Configuration["Data:AppsDbConnection:ConnectionString"]), ServiceLifetime.Scoped);
}
apsettings.json
{
"Logging": {
"LogLevel": {
"Default": "Warning"
}
},
"AllowedHosts": "*",
"Data": {
"OracleDbContext": "Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=zzz)(PORT=1521))(CONNECT_DATA=(zzzz)));User Id=zzz;Password=zzz;" },
"AppsDbContext": "Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=yyyy)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=yyyy)));User Id=yyyy;Password=yyyy;" }
}
}