在 .NET 5.0 框架项目中,我引用了以下包:
<PackageReference Include="Oracle.EntityFrameworkCore" Version="5.21.1" />
<PackageReference Include="Oracle.ManagedDataAccess.Core" Version="3.21.1" />
在 ConfigureSettings
方法中,我添加了以下代码:
services.AddDbContext<IMyDbContext, MyDbContext>((provider, options) =>
{
OracleConfiguration.OracleDataSources.Add("dev", "(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP )(HOST = <host> )(PORT = 1521 )) (CONNECT_DATA = (SERVICE_NAME = DEV ) ) )");
options.UseOracle(connectionString);
});
services.AddScoped(sp => (MyDbContext)sp.GetRequiredService<IMyDbContext>());
services.AddEntityFrameworkOracle();
在我的服务后期,我尝试查询一个简单的结果:
await _dataContext.MyTable.CountAsync(cancellationToken)
但我收到以下错误(错误消息是德语):
<块引用>Oracle.ManagedDataAccess.Client.OracleException (0x80004005): ORA-12154: TNS: Angegebener Connect Identifier konnte nicht aufgelöst werden
OracleInternal.Network.NetworkException (0x00002F7A): ORA-12154: TNS: Angegebener Connect Identifier konnte nicht aufgelöst werden
同时我在 Visual Studio Server Explorer 中使用以下连接字符串创建了一个连接:
Data Source=dev;Persist Security Info=True;User ID=*******;Password=***********;Unicode=True
获取查询数据就足够了。
我的项目设置有什么问题?
答案 0 :(得分:1)
连接字符串中省略TnsName,问题解决
https://www.connectionstrings.com/net-framework-data-provider-for-oracle/omiting-tnsnamesora/
更改后,我还删除了此代码行:
OracleConfiguration.OracleDataSources.Add