我正在 .NETCore 上开发一个 WebAPI,用于访问 POSTGRESQL DB 的数据。 我在 PostgreSQL 的非 MARS 支持方面遇到了麻烦。 NPGSQL 无法支持来自同一实例的多个连接(如 EntityFramework DbContext 生命周期 + Postgres 中所述:“操作已在进行中。”)。对于异步管理,这是阻塞的。
不幸的是,我找不到任何解决方案。 目前,我将数据库上下文注入:
services.AddEntityFrameworkNpgsql().AddDbContextPool<DBApiContext>(opt => opt.UseNpgsql('connectionString');
我使用EntityFramework。
仅适用于陷入此困境的人 - 就我而言,只需在方法末尾进行简单的代码更改即可解决此问题:
reader.close();
reader 是 NpgsqlDataReader 的对象。
对于可能感兴趣的人:我的问题全部与服务范围和依赖项注入有关。 请求者不是瞬态服务,因此对于每个请求,即使是并行请求,它都会尝试访问数据库。 Postgresql不支持MARS,那么第二个请求被拒绝。
您需要有请求访问的瞬态服务,以便每次调用都使用不同的数据库处理程序。
命令已在执行中
经历过此异常,对于我的情况,我在选择查询中使用
ToAsyncEnumerable()
,然后尝试在另一个选择数据库查询中使用返回的对象。
ToAsyncEnumerable() 在使用时会执行数据库调用 对象(延迟加载)