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 实现,开箱即用。

目录
相关文章
|
1月前
|
SQL 人工智能 前端开发
Vue3+NestJS实战:纺织行业AI进销存系统架构设计
本文介绍面向纺织行业的AI进销存系统“轻账LightLedger”架构设计:基于Vue3+Element Plus前端与NestJS后端,深度集成批号追溯、多单位换算、委外加工管理,并创新融合DeepSeek大模型实现自然语言智能查询,助力传统ERP升级。
209 2
|
SQL 数据库
商城数据库表设计介绍
商城数据库表设计介绍
2577 0
商城数据库表设计介绍
|
2月前
|
缓存 API 开发工具
企业级大模型落地指南:Qwen3.8‑Max/Flash/Omni 能力拆解,RAG 知识库、微调、智能体开发与 API 调用全流程
目前生成式AI已经从简单问答对话,进化为可以处理超长文档、图文音视频混合输入、自主拆解目标完成多步骤业务的通用智能底座。通义千问Qwen3.8完整家族形成了分层能力矩阵,覆盖旗舰推理、均衡通用、高速高吞吐、原生全模态视听、专项编程多类基座,既可以普通用户网页端直接交互体验,也可以通过百炼平台API集成进业务系统,同时开放开源权重,支持本地私有化部署,覆盖个人创作者、独立开发者、中小企业、大型政企的差异化诉求。
347 0
|
5月前
|
消息中间件 Linux Docker
Windows Docker Desktop 环境下 RabbitMQ 生产级部署完整指南
本文详解Windows下基于Docker Desktop部署RabbitMQ的标准化方案:避开Erlang配置痛点,推荐`rabbitmq:3.13-management-alpine`镜像;涵盖极简测试、持久化部署(必设`--hostname`)、自定义配置三类方案,并重点梳理Windows特有坑点(BOM编码、CRLF换行、guest远程限制等),助力快速搭建稳定本地开发环境。
607 7
|
5月前
|
JSON 自然语言处理 中间件
.NET 10 OpenAPI 三剑客:Swashbuckle、NSwag 与 Scalar 实战对比
本文对比.NET 10中Swashbuckle、NSwag与Scalar三大OpenAPI UI工具的现代化集成方案。自.NET 9起,文档生成已内置(`AddOpenApi`/`MapOpenApi`),UI工具仅负责渲染同一份`/openapi/v1.json`,实现解耦。三者注册方式、UI体验与扩展能力各具特色,选型应基于团队习惯、设计需求及生态整合目标。
266 0
.NET 10 OpenAPI 三剑客:Swashbuckle、NSwag 与 Scalar 实战对比
|
5月前
|
关系型数据库 MySQL 测试技术
升级 .NET 10 不想等 Pomelo.EntityFrameworkCore.MySql?试试 Microting.EntityFrameworkCore.MySql
本文详解如何在Pomelo尚未支持EF Core 10时,平滑升级至.NET 10:介绍Microting——Pomelo的官方分支,专注快速适配新.NET版本,API高度兼容,仅需替换命名空间与NuGet包即可完成迁移。
565 0
升级 .NET 10 不想等 Pomelo.EntityFrameworkCore.MySql?试试 Microting.EntityFrameworkCore.MySql
|
7月前
|
机器学习/深度学习 人工智能 自然语言处理
大模型应用:轻量化视觉语言模型(VLM):基于Qwen2-VL多模态模型实践.87
超紧凑视觉语言模型(如Qwen2-VL-2B)以仅20亿参数、约4GB体积,实现本地化图文理解与生成,支持CPU/入门GPU实时推理,兼顾精度与轻量部署,推动多模态AI走向终端、离线与普惠应用。
1979 2
|
8月前
|
人工智能 安全 开发者
阿里云 JVS Claw 全面开放公测!零门槛对接百炼大模型,免费解锁 AI 智能体全能力
阿里云 JVS Claw 智能体平台正式公测,零门槛开放,深度集成千问 3.5、万相视频等百炼全栈大模型,支持语音输入、专属文件空间、Skill 管控等 10+ 新功能,助力个人与企业轻松实现 AI 自动化工作流。
|
存储 关系型数据库 测试技术
拯救海量数据:PostgreSQL分区表性能优化实战手册(附压测对比)
本文深入解析PostgreSQL分区表的核心原理与优化策略,涵盖性能痛点、实战案例及压测对比。首先阐述分区表作为继承表+路由规则的逻辑封装,分析分区裁剪失效、全局索引膨胀和VACUUM堆积三大性能杀手,并通过电商订单表崩溃事件说明旧分区维护的重要性。接着提出四维设计法优化分区策略,包括时间范围分区黄金法则与自动化维护体系。同时对比局部索引与全局索引性能,展示后者在特定场景下的优势。进一步探讨并行查询优化、冷热数据分层存储及故障复盘,解决分区锁竞争问题。
html动态爱心代码【一】(附源码)
html动态爱心代码【一】(附源码)
16600 0

热门文章

最新文章