SqlSugar使用

# SqlSugar使用

SqlSugar 是一款 .NET开源ORM框架,由果糖大数据科技团队维护和更新 ,文档示例非常丰富,支持市面上绝大部分数据库包含国产数据库。

1.安装SqlSugar

使用Nuget安装SqlSugar

image-20251224161821451

如果要连接Oracle数据库需要在项目中引用 Oracle.ManagedDataAccess.dll

github下载链接:

SqlSugar/Oracle.ManagedDataAccess.dll

2.入门必看

官方文档:简单示例,1分钟入门 - SqlSugar 5x - .NET果糖网

数据库实体配置:配置实体 - SqlSugar 5x - .NET果糖网

可以通过SqlSugarClient 或者SqlSugarScope 来操作数据库 ,API都一样只是模式不同

(1) SqlSugarClient 原生模式访问数据库

(2) SqlSugarScope 单例模式访问数据库

模式 解释
SqlSugarClient 高性能:用法和Dapper、Ado、EF一样 ,不能单例,每个上下文都要是新的对象拥有超高性能,使用不当出现偶发错误通过IOC或者db.CopyNew()创建新的对象避免同一个对象在多个上下文使用 ,禁止单例 线程问题详细说明
疑问 :new对象为什么性能好,因为new的只是一个C#对象,没有100万以上并发纯C#对象不占一点内存和CPU,数据库操作底层有ado连接池管理,.net中的orm性能远超java
SqlSugarScope 性能中上:对新手友好能解决除异步外所有线程安全问题同时还能保证不错的性能,原理是通过AsyncLocal实现,特殊情况:Task.WhenAll 、Parallel、Job或者异步不写await , 需要db.CopyNew()保证线程安全 线程问题详细说明
只能单例,不能一直new该对象是不会清空的,一直new会有内存问题

例子使用的是单例模式:

 /// <summary>
 /// SqlSugar初始化类
 /// </summary>
 public class SqlSugarHelper
 {
     //用单例模式
     public static SqlSugarScope Db = new SqlSugarScope(new ConnectionConfig()
     {
         ConnectionString = ConfigurationManager.AppSettings["ConnectionString"],//连接符字串
         DbType = SqlSugar.DbType.Oracle,//数据库类型
         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))

               };
           });
 }

简单使用:

1.直接使用SQL查询

  string sql =
      @"select h.item_id,h.item_code,h.descriptions,e.line_id,k.line_code,j.point_code
            from bom_resources d
            join bom_resources_lines e
              on d.resource_id = e.resource_id
            join mtl_items h
              on h.item_id = e.item_id
            join wip_points j 
              on j.point_id=d.point_id
            join wip_lines k
              on k.line_id=d.line_id
           where h.item_code = '{0}'";
  var item = SqlSugarHelper.Db.Ado.GetDataTable(string.Format(sql, "dd")); 
    if (item.Rows.Count > 0)
       {
        dataRow["产线代码"] = item.Rows[0]["line_code"].ToString();
        dataRow["工作中心代码"] = item.Rows[0]["point_code"].ToString();
        }

2.使用表查询所有数据

/// <summary>
/// 变量维护
/// </summary>
public class Eam_variable_maintenance
{
    /// <summary>
    /// 主键id
    /// </summary>
    public int VARIABLE_ID { get; set; }
    /// <summary>
    /// 变量组
    /// </summary>
    public string VARIABLE_DESC { get; set; }
    /// <summary>
    /// 参数组
    /// </summary>
    public string PARAMETER_GROUP { get; set; }
    /// <summary>
    /// 变量
    /// </summary>
    public string PAR_CODE { get; set; }
    /// <summary> 
    /// 组织id 
    /// </summary>
    public int ORG_ID { get; set; }
    /// <summary>
    /// 创建时间
    /// </summary>
    public DateTime CREATION_DATE { get; set; }
    /// <summary>
    /// 创建人
    /// </summary>
    public string CREATED_BY { get; set; }
    /// <summary>
    /// 修改时间
    /// </summary>
    public DateTime LAST_UPDATE_DATE { get; set; }
    // <summary>
    /// 修改人
    /// </summary>
    public string LAST_UPDATED_BY { get; set; }
    /// <summary>
    /// 参数名称
    /// </summary>
    public string PAR_NAME { get; set; }
    // <summary>
    /// 描述
    /// </summary>
    public string PAR_DESCRIPTION { get; set; }
}
  var list = SqlSugarHelper.Db.Queryable<Eam_variable_maintenance>().ToList();
posted @ 2025-12-24 16:39  我本梁人  阅读(4)  评论(0)    收藏  举报