C#怎么使用Npgsql连接PostgreSQL_C# EF Core PostgreSQL教程【实战】

小墨姑娘_8247

小墨姑娘_8247

2026-05-20

271人浏览

原创

npgsql ef core是entity framework core的postgresql数据提供程序,需区分纯npgsql驱动与ef core扩展包:仅ado.net手动执行sql时装npgsql;使用dbcontext和linq时才装npgsql.entityframeworkcore.postgresql(自动依赖npgsql)。

c#怎么使用npgsql连接postgresql_c# ef core postgresql教程【实战】

别装错包,EF Core 和纯 Npgsql 是两套东西;连不上八成是连接字符串漏了 sslmode 或 Port,不是代码写错了。

装包必须分清 Npgsql 和 Npgsql.EntityFrameworkCore.PostgreSQL

新手常在 NuGet 搜 “postgres” 顺手装了 Npgsql.EntityFrameworkCore.PostgreSQL,结果 NpgsqlConnection 类型找不到——因为这个包只提供 EF Core 的扩展,不带底层驱动。

  • 只做 ADO.NET 手动 SQL 执行:只装 Npgsql
  • 要用 DbContext + LINQ:装 Npgsql.EntityFrameworkCore.PostgreSQL(它会自动拉取 Npgsql 作为依赖)
  • 用 dotnet add package Npgsql 默认装最新版,但 .NET Framework 4.6.1 只能用 Npgsql 3.2.7;否则运行时报 Could not load file or assembly 'Npgsql, Version=8.0.0.0'

连接字符串里 sslmode 和 Port 不是可选项

云环境(Azure、AWS RDS、Supabase)默认强制 SSL,但 Npgsql 不设 sslmode 时默认行为是 prefer,结果报 28000: no pg_hba.conf entry 这种误导性错误。

C#
C#

"避开 C# 常见错误——空陷阱、异步陷阱、LINQ 陷阱及资源泄漏。"

下载
  • 云服务必须显式写 sslmode=require
  • 本地开发且 PostgreSQL 没开 SSL:用 sslmode=disable,但上线前务必改回
  • Port 别省略:Docker 映射、Azure Flexible Server 常用非标端口(如 6432),不写就直连失败
  • 必须加 Timeout=30,否则卡住 15 秒才抛异常
  • 正确示例:Host=mydb.postgres.azure.com;Port=5432;Database=appdb;Username=appuser@mydb;Password=xxx;sslmode=require;Timeout=30

NpgsqlCommand 参数名必须用 :name,大小写敏感且不能用 @

PostgreSQL 原生用 :name 占位符,Npgsql 虽兼容 @name 写法,但底层只认 :name 绑定。写成 @id 看似不报错,实际参数值全为 NULL。

  • SQL 中写 :email,代码里也必须用 ":email"(注意引号和冒号)
  • :Email ≠ :email,不匹配也不报错,查不到数据
  • 传 null 时别用 AddWithValue,它可能推断成 int 导致 Can't write CLR type System.DBNull;改用 cmd.Parameters.Add(":age", NpgsqlDbType.Integer).Value = DBNull.Value
  • 批量插入别拼字符串,用 UNNEST:INSERT INTO logs (msg, ts) SELECT * FROM UNNEST(:msgs, :tss),然后传两个 string[] 参数

读大字段(jsonb、bytea)必须流式处理

jsonb 默认读成 string,bytea 默认转 byte[],但超过 1MB 就容易触发 OOM。流式才是正解。

  • 读 jsonb:先 ExecuteScalar() 拿 string,再用 System.Text.Json.JsonSerializer.Deserialize<t>()</t> 解析
  • 读大 bytea:用 reader.GetStream(0),不是 reader.GetValue(0)
  • NpgsqlDataReader 必须在 using 块内用完,提前释放连接会导致 InvalidOperationException: The connection was closed
  • 别手动关连接再读流——CommandBehavior.CloseConnection 已过时,DataReader 依赖连接生命周期

最容易被忽略的是:连接池 Polling=true 不可关闭,设 false 会被忽略;高频请求下关掉它会导致连接数爆炸、TCP 耗尽、响应延迟陡增。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

c#

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

2243

5

前端如何实现即时通讯
前端如何实现即时通讯

实现即时通讯的方法有WebSocket、Long Polling、Server-Sent Events、WebRTC等等。详细介绍:1、WebSocket,它可以在客户端和服务器之间建立持久连接,实现实时的双向通信,前端可以使用 WebSocket API来创建WebSocket连接,并通过发送和接收消息来实现即时通讯;2、Long Polling,是一种模拟实时通信的技术等等。

2023.10.09

4823

6

前端和后端的区别
前端和后端的区别

前端关注的是用户界面的设计和交互,而后端则注重数据处理和逻辑控制。想了解更多前端后端的相关内容,可以阅读本专题下面的文章。

2024.03.19

5950

13

php和前端的关联介绍
php和前端的关联介绍

php既可以作为前端语言,也可以作为后端语言。想了解更多php和前端的相关内容,可以阅读本专题下面的文章。

2024.03.22

5418

10

前端外包工作内容有哪些
前端外包工作内容有哪些

前端外包工作内容包括:1. 网站和应用程序开发;2. 用户界面和交互设计;3. 用户体验优化;4. 设计和视觉开发;5. 跨浏览器兼容性;6. 性能优化;7. 维护和更新;8. 项目管理和沟通。想了解更多前端的相关内容,可以阅读本专题下面的文章。

2024.05.22

763

5

c#是什么意思
c#是什么意思

C#是一种通用的面向对象编程语言,它在.NET框架上运行,可用于开发各种类型的应用程序。本专题为大家提供c#相关的各种文章、以及下载和课程。

2023.08.08

912

5

什么是c#
什么是c#

C#(读作C Sharp)是一种现代的、通用的、面向对象的编程语言。它由微软公司开发,于2000年首次发布,主要用于开发Windows桌面应用程序、Web应用程序、移动应用程序以及游戏开发等领域。C#是一种类型安全和托管的编程语言,它结合了C++的强大性能和C语言的简单易学特点,并引入了许多新的特性和概念,如委托、属性、泛型和异步编程等,以提高开发效率和代码可维护性。

2023.08.31

2531

3

C#中base关键字的用法
C#中base关键字的用法

在C#中,base关键字用于访问当前类的基类成员,这包括基类的字段、属性、方法、构造函数、索引器以及事件。想了解更多C#的相关内容,可以阅读本专题下面的文章。

2024.03.13

845

8

C#Task用法
C#Task用法

Task在C#中是用于表示异步操作的对象,它位于System.Threading.Tasks命名空间中。想了解更多C#中各种用法的相关内容,可以阅读本专题下面的文章。

2024.03.14

2595

11

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Conan 2 Essentials 免费课程
Conan 2 Essentials 免费课程

共0课时 | 0人学习

CMake 与 Conan 集成实践
CMake 与 Conan 集成实践

共0课时 | 0人学习

Conan 2 高级依赖模型介绍
Conan 2 高级依赖模型介绍

共0课时 | 0人学习