实体框架核心:连接到 Oracle 数据库

时间:2021-07-26 09:26:14

标签: .net oracle entity-framework-core .net-5

在 .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

获取查询数据就足够了。

我的项目设置有什么问题?

1 个答案:

答案 0 :(得分:1)

连接字符串中省略TnsName,问题解决

https://www.connectionstrings.com/net-framework-data-provider-for-oracle/omiting-tnsnamesora/

更改后,我还删除了此代码行:

OracleConfiguration.OracleDataSources.Add