npgsql 连接池,具有指定同一主机的两个连接字符串

问题描述 投票:0回答:1

如果我有两个不同的

DbContext
,其连接字符串仅在
Database
字段中不同,但
Host
Username
Password
等都相同,则在使用这两个
 时是否会重用相同的连接DbContext
在同一个线程中?从 pgadmin 仪表板来看,情况似乎如此,但我没有在任何地方看到它的记录。

此外,我有一些测试代码,我希望不会工作,因为它在 EF Core 6 中的

DbContext
中使用两个不同的
TransactionScope
,并且 AFAIK EF Core 6 根本不支持分布式事务。但是,代码确实可以工作并且不会抛出任何异常。

这是使用 Npgsql.EntityFrameworkCore.PostgreSQL 版本 6.0.7

postgresql .net-core entity-framework-core connection-pooling npgsql
1个回答
0
投票

在 7.0 版本中,Npgsql 引入了对 DbDataSource 的支持(发行说明)。当使用这个新功能时,一个 DbDataSource 对应一个连接池,因此实例化和使用两个数据源将意味着两个完全独立的池。

但是,当使用直接提供连接字符串(无 NpgsqlDataSource)的更传统模式时,池在 Npgsql 内部进行管理,并由连接字符串作为键控。所以在这种情况下,使用相同的连接字符串就意味着使用相同的连接池。要分离池,您可以改变字符串,例如通过引入

Application Name
参数 - 但总的来说,建议切换到 NpgsqlDataSource。

© www.soinside.com 2019 - 2024. All rights reserved.