.NETCore PostgreSQL“命令已在进行中”

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

我正在 .NETCore 上开发一个 WebAPI,用于访问 POSTGRESQL DB 的数据。 我在 PostgreSQL 的非 MARS 支持方面遇到了麻烦。 NPGSQL 无法支持来自同一实例的多个连接(如 EntityFramework DbContext 生命周期 + Postgres 中所述:“操作已在进行中。”)。对于异步管理,这是阻塞的。

不幸的是,我找不到任何解决方案。 目前,我将数据库上下文注入:

services.AddEntityFrameworkNpgsql().AddDbContextPool<DBApiContext>(opt => opt.UseNpgsql('connectionString');

我使用EntityFramework。

postgresql entity-framework asynchronous asp.net-core
3个回答
14
投票

仅适用于陷入此困境的人 - 就我而言,只需在方法末尾进行简单的代码更改即可解决此问题:

reader.close();

reader 是 NpgsqlDataReader 的对象。


4
投票

对于可能感兴趣的人:我的问题全部与服务范围和依赖项注入有关。 请求者不是瞬态服务,因此对于每个请求,即使是并行请求,它都会尝试访问数据库。 Postgresql不支持MARS,那么第二个请求被拒绝。

您需要有请求访问的瞬态服务,以便每次调用都使用不同的数据库处理程序。


0
投票

命令已在执行中

经历过此异常,对于我的情况,我在选择查询中使用

ToAsyncEnumerable()
,然后尝试在另一个选择数据库查询中使用返回的对象。

ToAsyncEnumerable() 在使用时会执行数据库调用 对象(延迟加载)

ToAsyncEnumerable

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