如果我有两个不同的
DbContext
,其连接字符串仅在 Database
字段中不同,但 Host
、Username
、Password
等都相同,则在使用这两个 时是否会重用相同的连接DbContext
在同一个线程中?从 pgadmin 仪表板来看,情况似乎如此,但我没有在任何地方看到它的记录。
此外,我有一些测试代码,我希望不会工作,因为它在 EF Core 6 中的
DbContext
中使用两个不同的 TransactionScope
,并且 AFAIK EF Core 6 根本不支持分布式事务。但是,代码确实可以工作并且不会抛出任何异常。
这是使用 Npgsql.EntityFrameworkCore.PostgreSQL 版本 6.0.7
在 7.0 版本中,Npgsql 引入了对 DbDataSource 的支持(发行说明)。当使用这个新功能时,一个 DbDataSource 对应一个连接池,因此实例化和使用两个数据源将意味着两个完全独立的池。
但是,当使用直接提供连接字符串(无 NpgsqlDataSource)的更传统模式时,池在 Npgsql 内部进行管理,并由连接字符串作为键控。所以在这种情况下,使用相同的连接字符串就意味着使用相同的连接池。要分离池,您可以改变字符串,例如通过引入
Application Name
参数 - 但总的来说,建议切换到 NpgsqlDataSource。