asp.net core webapi接入SqlSugar操作PostgreSQL:从零到一完整实战

简介: 本文详解 ASP.NET Core WebAPI 项目中,基于 SqlSugarCore 5.1.4.214 快速集成 PostgreSQL(12+)的完整实践:涵盖环境搭建、连接配置、自动建表、异步 CRUD 及分页接口,适配 .NET 6/7/8,Rider 开发,开箱即用。

本文将详细讲解在asp.net core webapi项目中,基于SqlSugarCore ORM框架实现PostgreSQL数据库的连接、配置、CRUD操作,适配.NET 6/.NET 7/.NET 8主流版本,全程无冗余配置,可直接落地项目。

一、环境准备

1.1 开发环境

  • 开发工具:Rider
  • 运行环境:.NET 6+ (推荐.NET 8 LTS)
  • 数据库:PostgreSQL 12+ (本地/服务器部署均可)
  • ORM框架:SqlSugarCore 5.1.4.214(固定稳定版本)

    1.2 数据库准备

提前安装PostgreSQL数据库,创建空数据库(示例数据库名:SqlSugarPgDb),无需手动创建数据表,后续通过SqlSugarCore代码自动建表。同时记录数据库连接所需参数:地址、端口、数据库名、账号、密码。

二、创建asp.net core webapi项目

  1. 打开Rider开发工具,点击首页New Solution新建解决方案项目
  2. 在项目模板中选择asp.net core webapi,自定义项目名称、存储路径,选择对应的.NET框架(如.NET 8)
  3. 取消Configure for HTTPS(HTTPS配置),点击创建,生成纯净的asp.net core webapi空项目

三、安装必要NuGet包

通过Rider内置NuGet包管理器或NuGet控制台,安装以下两个核心包(适配PostgreSQL专属依赖):

  • SqlSugarCore:.NET Core 专属核心ORM框架,提供数据库操作能力
  • Npgsql:PostgreSQL官方ADO.NET驱动,SqlSugarCore操作PG数据库必须依赖

本次项目固定使用SqlSugarCore 5.1.4.214 版本,提供两种Rider安装方式(图形化安装+终端命令安装),可任选其一:

方式一:Rider可视化NuGet包管理器安装(推荐)

1. 在Rider右侧面板找到【NuGet】包管理工具,打开包搜索界面;
2. 在搜索框输入 SqlSugarCore,检索对应组件;
3. 在版本下拉列表中,精准选择 5.1.4.214 固定版本;
4. 点击安装,等待Rider自动完成组件引入与引用配置。

方式二:.NET CLI 终端命令安装

打开Rider底部Terminal终端,切换到项目根目录,执行标准 .NET CLI 命令精准安装指定版本:

dotnet add package SqlSugarCore --version 5.1.4.214

四、配置数据库连接字符串

在项目根目录的appsettings.json中添加PostgreSQL数据库连接配置,替换为自己的数据库参数:

{
   
  "Logging": {
   
    "LogLevel": {
   
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning"
    }
  },
  "ConnectionStrings": {
   
    "PgSqlConnection": "Host=localhost;Port=5432;Database=SqlSugarPgDb;Username=postgres;Password=123456;Pooling=true;Maximum Pool Size=100"
  },
  "AllowedHosts": "*"
}

参数说明:Host为数据库地址、Port默认5432、Database为目标库名、Username为数据库账号、Password为登录密码;Pooling开启连接池、Maximum Pool Size设置最大连接数,提升高并发下的性能。

五、注册SqlSugarCore全局服务

Program.cs中配置SqlSugar参数,注册为全局单例服务,适配PostgreSQL数据库,开启日志、自动建表等功能:

using SqlSugar;
using SqlSugarPgDemo.Extensions;

var builder = WebApplication.CreateBuilder(args);

// 注册控制器
builder.Services.AddControllers();
// 注册Swagger文档
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();

// 注册SqlSugarCore服务
builder.Services.AddScoped<ISqlSugarClient>(sp =>
{
   
    var db = new SqlSugarClient(new ConnectionConfig()
    {
   
        // 数据库类型指定为PostgreSQL
        DbType = DbType.PostgreSQL,
        ConnectionString = builder.Configuration.GetConnectionString("PgSqlConnection"),
        // 开启自动释放数据库连接
        IsAutoCloseConnection = true,
        MoreSettings = new ConnMoreSettings()
        {
   
            PgSqlIsAutoToLower = false, // 是否自动转小写
            *PgSqlIsAutoToLowerCodeFirst = false, // CodeFirst时是否转小写
        }
    });

    // 开启SQL日志输出(控制台打印执行的SQL语句,方便调试)
    db.Aop.OnLogExecuting = (sql, pars) =>
    {
   
        Console.WriteLine($"执行SQL:{sql}\r\n参数:{string.Join(",", pars.Select(p => p.Value))}");
    };

    return db;
});

var app = builder.Build();

// 启用Swagger
if (app.Environment.IsDevelopment())
{
   
    app.UseSwagger();
    app.UseSwaggerUI();
}

app.UseAuthorization();
app.MapControllers();

// 初始化数据库表
app.InitTables();

app.Run();

六、创建实体类(数据库表映射)

新建Entity文件夹,创建测试实体类 User.cs,SqlSugarCore可通过该实体自动生成数据库表:

using SqlSugar;

namespace SqlSugarPgDemo.Entity
{
   
    /// <summary>
    /// 用户实体(自动映射user表)
    /// </summary>
    [SugarTable("sys_user")] // 指定数据库表名
    public class User
    {
   
        /// <summary>
        /// 主键ID(自增)
        /// </summary>
        [SugarColumn(IsPrimaryKey = true, IsIdentity = true)] // 主键、自增
        public int Id {
    get; set; }

        /// <summary>
        /// 用户名
        /// </summary>
        [SugarColumn(Length = 50, IsNullable = false)] // 字段长度、非空
        public string UserName {
    get; set; } = string.Empty;

        /// <summary>
        /// 手机号
        /// </summary>
        [SugarColumn(Length = 11, IsNullable = true)]
        public string? Phone {
    get; set; }

        /// <summary>
        /// 创建时间
        /// </summary>
        [SugarColumn(IsNullable = true)]
        public DateTime? CreateTime {
    get; set; }
    }
}

核心特性说明:SugarTable指定表名,SugarColumn配置字段属性(主键、自增、长度、是否为空),完美适配PostgreSQL字段规则。

七、项目启动自动初始化数据库表(扩展类方式)

本文采用项目启动自动建表方案,无需手动调用接口,通过自定义扩展类实现程序启动时自动根据实体类创建数据表,不存在则创建,已存在则忽略,适配PostgreSQL数据库。首先在项目中新建 Extensions 文件夹,创建扩展静态类 Extensions.cs

using SqlSugar;
using SqlSugarPgDemo.Entity;
using Microsoft.AspNetCore.Builder;

namespace SqlSugarPgDemo.Extensions;

public static class Extensions
{
   
    /// <summary>
    /// 项目启动初始化数据库表
    /// </summary>
    /// <param name="app"></param>
    public static void InitTables(this IApplicationBuilder app)
    {
   
        // 创建服务作用域,获取SqlSugarCore实例
        using var scope = app.ApplicationServices.CreateScope();
        var db = scope.ServiceProvider.GetRequiredService<ISqlSugarClient>();

        // 自动根据实体初始化数据表
        db.CodeFirst.InitTables<User>();
    }
}

扩展类编写完成后,已在前文Program.cs中引入调用 app.InitTables();,无需手动调用接口。在Rider中点击右上角运行按钮启动项目,程序启动完成后,会自动在PostgreSQL数据库中生成 sys_user 数据表,全程无需人工干预。

八、实现CRUD核心接口

新建 UserController.cs,实现新增、查询、修改、删除、分页查询等常用数据库操作:

using Microsoft.AspNetCore.Mvc;
using SqlSugar;
using SqlSugarPgDemo.Entity;

namespace SqlSugarPgDemo.Controllers;

[Route("api/**[controller]**")]
[ApiController]
public class UserController : ControllerBase
{
    private readonly ISqlSugarClient _db;

    public UserController(ISqlSugarClient db)
    {
        _db = db;
    }

    /// <summary>
    /// 新增用户
    /// </summary>
    [HttpPost("Add")]
    public async Task<IActionResult> AddUser([FromBody] User user)
    {
        user.CreateTime = DateTime.Now;
        int id = await _db.Insertable(user).ExecuteReturnIdentityAsync();
        return Ok($"新增成功,用户ID:{id}");
    }

    /// <summary>
    /// 根据ID查询用户
    /// </summary>
    [HttpGet("GetById/{id}")]
    public async Task<IActionResult> GetUserById(int id)
    {
        var user = await _db.Queryable<User>().InSingleAsync(id);
        return Ok(user);
    }

    /// <summary>
    /// 查询所有用户
    /// </summary>
    [HttpGet("GetAll")]
    public async Task<IActionResult> GetAllUser()
    {
        var list = await _db.Queryable<User>().ToListAsync();
        return Ok(list);
    }

    /// <summary>
    /// 分页查询用户
    /// </summary>
    [HttpGet("GetPage")]
    public async Task<IActionResult> GetPageUser(int pageIndex = 1, int pageSize = 10)
    {
        var pageData = await _db.Queryable<User>()
            .ToPageListAsync(pageIndex, pageSize);
        return Ok(pageData);
    }

    /// <summary>
    /// 修改用户信息
    /// </summary>
    [HttpPut("Update")]
    public async Task<IActionResult> UpdateUser([FromBody] User user)
    {
        int rows = await _db.Updateable(user).UpdateColumns(x => new { x.UserName, x.Phone }).ExecuteCommandAsync();
        return Ok($"修改成功,影响行数:{rows}");
    }

    /// <summary>
    /// 删除用户
    /// </summary>
    [HttpDelete("Delete/{id}")]
    public async Task<IActionResult> DeleteUser(int id)
    {
        int rows = await _db.Deleteable<User>().In(id).ExecuteCommandAsync();
        return Ok($"删除成功,影响行数:{rows}");
    }
}

九、常见问题排查

  • 数据库连接失败:检查PostgreSQL服务是否正常运行、默认端口5432是否未被占用、连接字符串的地址、库名、账号密码是否正确,确保本地数据库已提前创建。
  • 主键自增失效:实体主键必须配置 IsIdentity = true,PostgreSQL依赖序列实现自增,CodeFirst建表会自动生成序列,请勿手动修改数据表主键规则。
  • SQL语法兼容报错:注册服务时必须指定 DbType.PostgreSQL,严格适配PG数据库语法,禁止使用SqlServer默认配置,否则会出现语法解析异常。
  • 表名字段大小写适配问题:本项目已关闭PG自动转小写配置(PgSqlIsAutoToLower=false),实体特性配置的表名、字段名需和数据库严格一致,统一采用小写命名规范即可正常适配。
  • 项目启动建表无效:检查Program.cs中是否正确调用 app.InitTables() 扩展方法,确保SqlSugarCore服务注册正常、服务作用域可正常获取数据库实例。

十、总结

通过以上完整步骤,已从零完成 asp.net core webapi + SqlSugarCore 5.1.4.214 + PostgreSQL 的基础整合配置。教程全程基于Rider开发环境,采用.NET CLI标准安装方式、规范的数据库连接配置、程序启动自动CodeFirst建表方案,同时实现了全套异步CRUD基础接口(新增、查询、修改、删除、分页查询)。SqlSugarCore完美适配PostgreSQL数据库特性,规避了大小写兼容、语法适配等常见坑,配置简洁、代码轻量化,满足项目基础数据库开发需求,可直接用于日常开发与项目落地。

十一、项目源码地址

本文完整实战项目代码已上传至码云Gitee,包含所有配置文件、实体类、扩展方法、CRUD接口,可直接克隆运行学习:

Gitee仓库地址:https://gitcode.com/GUOGUOXYES/SqlSugarPgDemo

仓库代码与本文教程完全同步,基于 Rider + asp.net core webapi + SqlSugarCore 5.1.4.214 + PostgreSQL 实现,开箱即用。

目录
相关文章
|
28天前
|
人工智能 文字识别 并行计算
离谱!我以为 OCR 还在一页页抠字,结果百度 1.2 万 Star Unlimited-OCR 直接把长文档一口气读完
百度开源 Unlimited-OCR,把图片、长文档、多页 PDF 这类非结构化资料推进到 Markdown、表格和可检索文本,适合 RAG、知识库和 Agent 文档入口。
203 7
|
1月前
|
人工智能 缓存 运维
重磅发布丨云监控 AI Agent 可观测,企业生产级 Agent 首选全域观测平台
AI Agent 可观测是面向企业生产级 Agent 的全域观测平台,提供从接入、建模、分析到 Agentic Ops 的全域观测和分析能力,帮助企业彻底打开 Agent 的黑箱,实现 Agent 执行过程的可追踪、可诊断、可优化。
569 24
|
Java 测试技术 Go
利用 GitHub Action 自动发布 Docker
最近公司内部项目的发布流程接入了 GitHub Actions,整个体验过程还是比较美好的;本文主要目的是对于没有还接触过 GitHub Actions的新手,能够利用它快速构建自动测试及打包推送 Docker 镜像等自动化流程。
|
2天前
|
人工智能 安全 前端开发
阿里云Qoder CN AI编程智能体:重塑开发全流程的智能助手
在软件开发领域,AI技术正从简单的代码补全工具,进化为能够贯穿需求分析、代码编写、测试验证、项目管理全流程的智能体。阿里云推出的Qoder CN AI编程智能体,正是这一趋势下的核心产品,它脱胎于通义灵码,完成了从传统AI集成开发环境到智能体全自动自主开发工作台的跨越,为个人开发者、技术团队及企业级项目提供了全方位的智能开发支持。Qoder CN不再局限于单一的代码辅助,而是以智能体为核心,构建了一套完整的开发生态,通过多模型融合、多智能体协作、全流程自主执行等能力,彻底改变传统开发模式,大幅提升开发效率与代码质量。
127 3
|
10天前
|
人工智能 运维 BI
QoderWork + QoderWake 实战:AI 数字员工的企业级落地与效率革命
企业办公中大量重复性工作正在吞噬团队的创造力。QoderWork CN 作为桌面 AI 办公助手,本地运行、自主规划、安全可控,内置丰富 Skill 覆盖文案写作、幻灯片制作、浏览器自动化等场景;QoderWake CN 作为数字员工平台,全天在线、支持企业私域知识库与自定义扩展。本文从运营团队的实际痛点出发,完整拆解 QoderWork + QoderWake 的企业级落地路径,包含四大典型场景的实战配置、五个真实踩坑案例,以及从试点到推广的完整 SOP。
|
6天前
|
人工智能 数据挖掘 API
Qwen3.8千问新一代旗舰模型上线:在阿里云百炼TokenPlan调用Qwen3.8-Max-Preview体验版
阿里云Qwen3.8-Max-Preview是2.4T参数旗舰预览模型,聚焦Coding与Cowork,支持多模态、长任务与智能体协作,在Token Plan享白天1折、夜间0.2折优惠,个人版39元起/月。在阿里云百炼官网:https://t.aliyun.com/U/fPVHqY 免费领取千万Tokens
|
11天前
|
人工智能 监控 C++
技能架构设计:208个金融AI Skill的分类体系
银行智能体架构:7个Skill如何协同工作 实战代码:基于 financial-ai-skills 项目 | 架构设计 | Skill协同 | 数据流 单体架构 vs 微服务架构 银行系统常见的两种架构: `` 单体架构: 微服务架构: ┌─────────────┐ ┌─────┐ ┌─────┐ ┌─────┐ │ 核心系统 │ │信贷 │ │风控 │ │营销 │ │ ├─信贷
|
9天前
|
存储 人工智能 运维
企业AI知识库搭建指南:手把手教你落地
本指南面向企业IT负责人,手把手教你安全落地AI知识库:聚焦本地私有化部署、文档解析、向量检索与RAG框架搭建,强调数据不出域、分级权限与合规风控,助企业盘活内部知识资产,实现“问问题即得答案”。
129 4
|
13天前
|
存储 人工智能 Kubernetes
阿里云 AgentTeams 解读:当 Agent 开始真正在企业里干活
多 Agent 协作不只是任务并行,更是组织运转。从产品主创团队视角,聊聊 AgentTeams 在安全、协作、弹性、进化四个方向的设计思考。
|
11天前
|
人工智能 自然语言处理 监控
开源生态构建:从6个GitHub仓库到金融AI工具链
开源金融AI技能库:56个场景全覆盖 实战代码:基于 financial-ai-skills 项目 | 开源生态 | 场景覆盖 | 贡献指南 项目概览 `` financial-ai-skills/ ├── README.md ├── LICENSE (MIT) ├── skills/ │ ├── financial-intelligence/ # 财务智能 (8个场景) │ ├──