.NET 6使用Npgsql 7.0.1时,NpgsqlDataSource创建命令是否无需Prepare()?
问题解答
是的,通过NpgsqlDataSource创建的命令不需要手动调用Prepare(),具体说明如下:
- 你遇到的
NotSupportedException是因为NpgsqlDataSource生成的NpgsqlDataSourceCommand类本身不支持Prepare()方法。这类命令基于连接池设计,语句准备逻辑由驱动内部自动处理,不对外暴露手动准备的接口。 - Npgsql 7.0及以上版本中,对于通过
NpgsqlDataSource创建的参数化查询,驱动会自动完成服务器端语句的准备与缓存。当你重复执行相同结构的查询时,驱动会复用已准备好的语句,完全不需要手动调用Prepare()来触发优化。 - 移除
Prepare()调用后程序正常运行是完全符合预期的——手动准备在这个场景下不仅不必要,还会触发不支持的操作报错。
修正后的示例代码:
await using var cmd = _dataSource.CreateCommand(query); // 直接执行命令,无需调用Prepare() await cmd.ExecuteReaderAsync();
内容的提问来源于stack exchange,提问作者Kevin Monestel Amador
相关产品推荐
相关产品推荐

