闸机控制系统从设计到实现全解析 第 2 篇:数据库设计与 SqlSugar 集成方案

发布于:2025-07-31 ⋅ 阅读:(23) ⋅ 点赞:(0)

第 2 篇:数据库设计与 SqlSugar 集成方案

一、数据库表结构设计

基于业务实体关系,设计 4 张核心表:

  1. 位置表(location)
  • 核心字段:Id(主键)、Name(位置名称)、Code(唯一编码)、Description(描述)、IsActive(启用状态)。

  • 作用:实现闸机的分组管理,关联物理区域。

  1. 闸机设备表(gatedevice)
  • 核心字段:Id、Name、Code(唯一编码)、LocationId(关联位置)、Status(状态:0 - 关闭 / 1 - 打开 / 2 - 故障)、IpAddress(网络地址)。

  • 外键关联:通过 LocationId 与 location 表建立一对多关系。

  1. 票证表(ticket)
  • 核心字段:Id、Code(唯一编码)、Type(1 - 二维码 / 2 - 身份证)、LocationId(限制位置,可为空)、StartTime/EndTime(有效期)、IsUsed(使用状态)、UseTime(使用时间)。

  • 关键设计:IsUsed 字段确保 “一票一次”,LocationId 实现区域限制。

  1. 通行记录表(accessrecord)
  • 核心字段:Id、TicketId、TicketCode、GateId、LocationId、VerificationType(验证方式)、Result(0 - 失败 / 1 - 成功)、VerifyTime(验证时间)、GateOpenTime/CloseTime(闸机开关时间)。

  • 作用:完整追溯每次通行行为,支持数据统计与审计。

二、SqlSugar 集成步骤

SQLSugar 是一款款基于 .NET 的轻量级 ORM(对象关系映射)框架,它简化了数据库操作,提供了简洁的 API 和丰富的功能,同时兼顾了性能和灵活性。
核心特性

  • 轻量级设计
    体积小、依赖少,无需复杂配置即可快速集成到项目中(支持 .NET Framework 和 .NET Core)。

  • 丰富的数据库支持
    支持 SQL Server、MySQL、Oracle、PostgreSQL、SQLite、达梦、人大金仓等主流数据库,且切换数据库时无需大量修改代码。

  • 链式查询语法
    提供直观的链式 API,类似 LINQ 的语法,降低 SQL 编写成本

  • 高性能
    通过 SQL 缓存、参数化查询、延迟加载等机制优化性能,同时支持原生 SQL 执行,兼顾灵活性和效率。

  • 完整的 CRUD 操作
    内置增删改查方法,支持批量操作、事务管理、分页查询等常见需求。

  • 实体映射
    自动映射实体类与数据库表,支持自定义映射关系(如字段名、主键、自增等)。

  1. 安装依赖:通过 NuGet 安装 SqlSugarCore 和 MySqlConnector 包。
dotnet add package SqlSugarCore

dotnet add package MySqlConnector
  1. 配置数据库连接:在 appsettings.json 中添加连接字符串。
"ConnectionStrings": {

 "MySql": "server=localhost;database=gatecontrol;user=root;password=123456;"

}
  1. 注册 SqlSugar 服务:在 Program.cs 中配置注入。
builder.Services.AddSqlSugar(new ConnectionConfig {

   ConnectionString = builder.Configuration.GetConnectionString("MySql"),

   DbType = DbType.MySql,

   IsAutoCloseConnection = true

});
  1. 数据上下文封装:创建 SqlSugarClient 实例,提供基础 CRUD 方法。
public class DbContext

{

   private readonly ISqlSugarClient _db;

   public DbContext(ISqlSugarClient db) => _db = db;

  

   // 定义实体集合

   public ISugarQueryable\<Location> Locations => _db.Queryable\<Location>();

   // 其他表...

}

网站公告

今日签到

点亮在社区的每一天
去签到