SqlSugar ORM 基础使用教程

06-01 1752阅读

1. 简介

SqlSugar 是一款轻量级、高性能的国产 ORM 框架,支持主流数据库(MySQL/SQL Server/Oracle/PostgreSQL等),具有以下特点:

  • 简单易用的 Lambda 表达式查询

  • 强大的分库分表支持

  • 完善的 Code First 开发体验

  • 高性能(官方基准测试优于大部分主流ORM)

  • 支持 .NET Framework 4.6+ 和 .NET Core 2.0+

    2. 环境准备

    2.1 安装

    通过 NuGet 包管理器安装:

    Install-Package SqlSugar
     
    

    2.2 数据库准备

    以 MySQL 为例,创建示例数据库:

    CREATE DATABASE SampleDB;
    USE SampleDB;
    CREATE TABLE Users (
        Id INT PRIMARY KEY AUTO_INCREMENT,
        Name VARCHAR(50) NOT NULL,
        Age INT,
        CreateTime DATETIME DEFAULT CURRENT_TIMESTAMP
    );

    3. 基础配置

    3.1 创建实体类

    [SugarTable("Users")]
    public class User
    {
        [SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
        public int Id { get; set; }
        
        [SugarColumn(Length = 50)]
        public string Name { get; set; }
        
        public int? Age { get; set; }
        
        [SugarColumn(IsNullable = true)]
        public DateTime CreateTime { get; set; }
    }

    3.2 实体配置-配置SugarColumn属性

    在 SqlSugar 中,SugarColumn 属性用于配置列的元数据信息,这对于 ORM 映射非常重要。下面是一些常见的 SugarColumn 属性及其用途:

    1、ColumnName-指定数据库表中对应的列名。

    2、IsNullable-指定列是否可以为 NULL。

    3、IsIdentity-指定列是否为自增列。

    4、IsPrimaryKey-指定列是否为主键。

    5、DbType-指定列的数据类型。

    6、Length-指定列的最大长度。

    7、CSharpType-指定 C# 中的类型

    SqlSugar ORM 基础使用教程
    (图片来源网络,侵删)

    8、IsIgnore-指定是否忽略此属性

    9、DefaultValue-指定默认值

    SqlSugar ORM 基础使用教程
    (图片来源网络,侵删)

    3.3 初始化SqlSugarClient

    public class DbContext
    {
        public static SqlSugarClient GetInstance()
        {
            return new SqlSugarClient(new ConnectionConfig()
            {
                ConnectionString = "Server=localhost;Database=SampleDB;Uid=root;Pwd=123456;",
                DbType = DbType.MySql,
                IsAutoCloseConnection = true,
                InitKeyType = InitKeyType.Attribute
            });
        }
    }

    4. 基础CRUD操作

    4.1 插入数据

    using var db = DbContext.GetInstance();
    // 插入单条
    var user = new User { Name = "张三", Age = 25 };
    int id = db.Insertable(user).ExecuteReturnIdentity();
    // 批量插入
    var users = new List
    {
        new User { Name = "李四", Age = 30 },
        new User { Name = "王五", Age = 28 }
    };
    db.Insertable(users).ExecuteCommand();
     
    

    4.2 查询数据

    // 查询所有
    var list = db.Queryable().ToList();
    // 条件查询
    var user = db.Queryable()
                .Where(u => u.Age > 25)
                .First();
    // 分页查询
    var pageList = db.Queryable()
                    .Where(u => u.Age > 20)
                    .ToPageList(1, 10, ref totalCount);
     
    

    4.3 更新数据

    // 更新整个实体
    user.Name = "修改后的名字";
    db.Updateable(user).ExecuteCommand();
    // 条件更新
    db.Updateable()
      .SetColumns(u => u.Age == 30)
      .Where(u => u.Id == 1)
      .ExecuteCommand();
     
    

    4.4 删除数据

    // 根据主键删除
    db.Deleteable(1).ExecuteCommand();
    // 条件删除
    db.Deleteable()
      .Where(u => u.Age  
    
     
    

    5. 事务处理

    try
    {
        db.Ado.BeginTran();
        
        // 业务操作1
        db.Insertable(user1).ExecuteCommand();
        
        // 业务操作2
        db.Updateable(user2).ExecuteCommand();
        
        db.Ado.CommitTran();
    }
    catch(Exception ex)
    {
        db.Ado.RollbackTran();
        throw;
    }
     
    

    6. 高级功能示例

    6.1 联表查询

    var query = db.Queryable((u, o) => u.Id == o.UserId)
                .Where((u, o) => u.Age > 25)
                .Select((u, o) => new
                {
                    UserName = u.Name,
                    OrderNo = o.OrderNumber
                })
                .ToList();
     
    

    7. 最佳实践

    7.1 性能优化

    • 批量操作使用Insertable(list).ExecuteCommand()代替循环插入

    • 频繁查询的字段添加索引

      SqlSugar ORM 基础使用教程
      (图片来源网络,侵删)
    • 使用AsQueryable()延迟查询

      7.2 代码规范

      • 实体类使用[SugarTable]和[SugarColumn]显式配置

      • 复杂查询使用Lambda表达式保持强类型

      • 事务范围尽量缩小

        7.3 常见问题

        1. 日期格式问题:

          配置MySql全局日期格式:

          db.Ado.ExecuteCommand("SET GLOBAL sql_mode='STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION';");
           
        2. 导航属性加载:

          使用Mapper方法实现:

          var user = db.Queryable()
                      .Mapper(u => u.Orders, u => u.Id)
                      .First();
           

        8. 扩展阅读

        • 官方文档:SqlSugar .Net ORM 5.X 官网 、文档、教程 - SqlSugar 5x - .NET果糖网

        • GitHub仓库:https://github.com/donet5/SqlSugar

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们。

目录[+]

取消
微信二维码
微信二维码
支付宝二维码