一款支持多种数据库和功能的 .NET ORM 框架,提供了零SQL、低代码、高性能、多库兼容等特色!

文摘   2024-11-16 08:01   广东  

我们致力于探索、分享和推荐最新的实用技术栈、开源项目、框架和实用工具。每天都有新鲜的开源资讯等待你的发现!


项目介绍

SqlSugar是一个针对.NET平台设计的ORM框架,以其快速、简单、易用著称,并支持多种数据库,包括国内外主流数据库和国产数据库。

开箱即用,MIT License开源免费。

  • 开源地址:https://gitee.com/dotnetchina/SqlSugar
  • 在线文档:https://www.donet5.com/Home/Doc?typeId=1180

ORM的作用

ORM通过提供一套面向对象的方式来操作数据库,简化了数据库操作的复杂性,提高了开发效率和代码质量,是现代软件开发中不可或缺的工具之一。

功能介绍

  1. 真正可以实现零SQL的ORM 建表、索引和CRUD全部支持。
  2. 支持 .NET 百万级大数据写入、更新、分表和拥有几十亿查询统计成熟解决方案。
  3. 支持 SAAS 完整应用 :跨库查询 、审计、租户分库 、租户分表 和 租户数据隔离。
  4. 支持低代码+工作流  (动态建类 、动态建表、无实体多库兼容CRUD 、 JSON TO SQL 、自定义XML等)。
  5. 支持ValueObject、鉴别器、仓储、UnitOfWork、DbContext、AOP 。
  6. 支持 DbFirst、CodeFirst和WebFirst 3种模式开发。
  7. 简单易用、功能齐全、高性能、轻量级、文档齐全
  8. 完美支持AOT:多种数据库。

数据库支持

原生模式

SqlSugarClient 每次请求new一个新对象,db禁止跨上下文使用,IOC建议用Scope或者瞬发注入

using SqlSugar;
 
 
//创建数据库对象 (用法和EF Dappper一样通过new保证线程安全)
SqlSugarClient Db = new SqlSugarClient(new ConnectionConfig()
{
    ConnectionString = "datasource=demo.db",
    DbType = DbType.Sqlite,
    IsAutoCloseConnection = true
},
db => {
  
        db.Aop.OnLogExecuting = (sql, pars) =>
        {
             
            //获取原生SQL推荐 5.1.4.63  性能OK
            Console.WriteLine(UtilMethods.GetNativeSql(sql, pars));
 
            //获取无参数化SQL 对性能有影响,特别大的SQL参数多的,调试使用
            //Console.WriteLine(UtilMethods.GetSqlString(DbType.SqlServer,sql,pars))
 
 
         };
 
        //注意多租户 有几个设置几个
        //db.GetConnection(i).Aop
 
    });
 
//建库
Db.DbMaintenance.CreateDatabase();//达梦和Oracle不支持建库
 
//建表(看文档迁移)
Db.CodeFirst.InitTables<Student>(); //所有库都支持     
 
//查询表的所有
var list = Db.Queryable<Student>().ToList();
 
//插入
Db.Insertable(new Student() { SchoolId = 1, Name = "jack" }).ExecuteCommand();
 
//更新
Db.Updateable(new Student() { Id = 1, SchoolId = 2, Name = "jack2" }).ExecuteCommand();
 
//删除
Db.Deleteable<Student>().Where(it => it.Id == 1).ExecuteCommand();
  
 
 
//实体与数据库结构一样
public class Student
{
    //数据是自增需要加上IsIdentity 
    //数据库是主键需要加上IsPrimaryKey 
    //注意:要完全和数据库一致2个属性
    [SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
    public int Id { get; set; }
    public int? SchoolId { get; set; }
    public string? Name { get; set; }
}

单例模式

SqlSugarScope 请使用单例模式,配置参数有2种周期:

  • (A):全局生效
  • (B): 当前上下文生效
using SqlSugar;
  
//建库
SqlSugarHelper.Db.DbMaintenance.CreateDatabase();//达梦和Oracle不支持建库
 
//建表 (看文档迁移)
SqlSugarHelper.Db.CodeFirst.InitTables<Student>(); //所有库都支持
 
//查询表的所有
var list = SqlSugarHelper.Db.Queryable<Student>().ToList();
 
//插入
SqlSugarHelper.Db.Insertable(new Student() { SchoolId = 1, Name = "jack" }).ExecuteCommand();
 
//更新
SqlSugarHelper.Db.Updateable(new Student() { Id = 1, SchoolId = 2, Name = "jack2" }).ExecuteCommand();
 
//删除
SqlSugarHelper.Db.Deleteable<Student>().Where(it => it.Id == 1).ExecuteCommand();
 
 
public class SqlSugarHelper //不能是泛型类
{
 
    //多库情况下使用说明:
    //如果是固定多库可以传 new SqlSugarScope(List<ConnectionConfig>,db=>{}) 文档:多租户
    //如果是不固定多库 可以看文档Saas分库
    //用单例模式
    public static SqlSugarScope Db = new SqlSugarScope(new ConnectionConfig()
    {
        ConnectionString = "datasource=demo.db",//连接符字串
        DbType = DbType.Sqlite,//数据库类型
        IsAutoCloseConnection = true //不设成true要手动close
    },
  db => {
      //(A)全局生效配置点,一般AOP和程序启动的配置扔这里面 ,所有上下文生效
      //调试SQL事件,可以删掉
      db.Aop.OnLogExecuting = (sql, pars) =>
      { 
 
          //获取原生SQL推荐 5.1.4.63  性能OK
          Console.WriteLine(UtilMethods.GetNativeSql(sql,pars));
 
          //获取无参数化SQL 对性能有影响,特别大的SQL参数多的,调试使用
          //Console.WriteLine(UtilMethods.GetSqlString(DbType.SqlServer,sql,pars))
 
      };
 
      //多个配置就写下面
      //db.Ado.IsDisableMasterSlaveSeparation=true;
 
      //注意多租户 有几个设置几个
      //db.GetConnection(i).Aop
  });
}
 
//实体与数据库结构一样
public class Student
{
    //数据是自增需要加上IsIdentity 
    //数据库是主键需要加上IsPrimaryKey 
    //注意:要完全和数据库一致2个属性
    [SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
    public int Id { get; set; }
    public int? SchoolId { get; set; }
    public string? Name { get; set; }
}




追逐时光者
DotNetGuide官方公众号,微软MVP,专注于C#/.NET/.NET Core学习、工作、面试干货和实战教程分享。这里聚焦了大量的C#/.NET/.NET Core优质文章、开源项目、实用工具和学习、工作、面试心得。
 最新文章