title: SqlSugar DbContext
date: 2023-02-16 20:01:41
tags: SqlSugar
categories: ORM
description: 总结整理SqlSugar的DbContext 方便之后使用
cover: 'https://api.vvhan.com/api/acgimg' # 'https://service-dn725wcs-1306777571.gz.apigw.tencentcs.com/release/' https://api.vvhan.com/api/acgimg
swiper_index: 5 # 置顶轮播图顺序,非负整数,数字越大越靠前
comments: false # 关闭评论功能

前言

{% note blue no-icon %}

什么是SqlSugar?

SqlSugar 是 .NET/C# 平台非常优秀的 ORM 框架,目前 Nuget 总下载突破 1000K,Github 关注量也高达 3.7K

SqlSugar 拥有高性能,具有百万级插入、更新大数据分表等特色功能,是目前当之无愧的国产优秀 ORM 框架之一。

  1. 支持 MySql、SqlServer、Sqlite、Oracle、postgresql、达梦、人大金仓 等多种数据库
  2. 支持 全自动分表
  3. 支持 多库事务
  4. 支持 CodeFirst / DbFirst
  5. 支持 联表查询、嵌套查询、导航查询、子查询、动态JSON查询等查询操作
  6. 支持 SqlServer、MySql、PgSql、Oracle 百万级插入和更新

个人感受

其实说起来接触SqlSugar的时间并不是很长,但是用过之后,只有一个感觉:太丝滑了!

文档齐全,新手上路贼容易,真的{% span red, 强烈推荐 %}!!!

目前本人手里的项目,只要与数据库交互的,已经统统切换成了SqlSugar

官方文档

{% hideBlock 点我查看, orange %}

{% link SqlSugar文档教程贴, https://www.donet5.com/Home/Doc, https://www.donet5.com/HtmlTemplate2/com_files/logo.png %}

{% endnote %}

.Net Framework部分

{% folding cyan, 代码 & 使用 %}

完整代码

    using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Linq.Expressions;
using SqlSugar;
using DbType = SqlSugar.DbType; namespace CodeProject.Database
{
/// <summary>
/// 数据库上下文
/// </summary>
public class SqlSugarDbContext
{
/// <summary>
/// 数据库连接字符串(私有字段)
/// </summary>
private static string DbConnString = ConfigurationManager.ConnectionStrings["sqlConStr"].ConnectionString; /// <summary>
/// 数据库类型(私有字段)
/// </summary>
private static string _databaseType = ConfigurationManager.ConnectionStrings["sqlConStr"].ProviderName; /// <summary>
/// 用来处理事务多表查询和复杂的操作
/// 注意:不能写成静态的
/// </summary>
public SqlSugarClient Db; public SqlSugarDbContext()
{
DbType dbType;
switch (_databaseType)
{
case "System.Data.SqlClient":
dbType = DbType.SqlServer;
break;
case "System.Data.SqliteClient":
dbType = DbType.Sqlite;
break;
case "MySql.Data.MySqlClient":
dbType = DbType.MySql;
break;
case "Oracle.ManagedDataAccess.Client":
dbType = DbType.Oracle;
break;
default:
dbType = DbType.SqlServer;
break;
} Db = new SqlSugarClient(new ConnectionConfig()
{
ConnectionString = DbConnString,//数据库连接串
DbType = dbType,//数据库类型
InitKeyType = InitKeyType.SystemTable,//从数据库中读取主键和自增列信息 //InitKeyType.Attribute,//从特性读取主键和自增列信息
IsAutoCloseConnection = true,//开启自动释放模式和EF原理一样我就不多解释了 });
//调式代码 用来打印SQL
Db.Aop.OnLogExecuting = (sql, pars) =>
{
Console.WriteLine(sql + "\r\n" +
Db.Utilities.SerializeObject(pars.ToDictionary(it => it.ParameterName, it => it.Value)));
Console.WriteLine();
};
} #region 库表操作
/// <summary>
/// 备份表
/// </summary>
/// <param name="oldname">旧表名称</param>
/// <param name="newname">新表名称</param>
/// <returns></returns>
public virtual bool BackupTable(string oldname, string newname)
{
if (!Db.DbMaintenance.IsAnyTable(newname, false))
{
return Db.DbMaintenance.BackupTable(oldname, newname, 0);
}
return false;
}
/// <summary>
/// 删除表
/// </summary>
/// <param name="tablename">表名称</param>
/// <returns></returns>
public virtual bool DropTable(string tablename)
{
return Db.DbMaintenance.DropTable(tablename);
} /// <summary>
/// 清空表
/// </summary>
/// <param name="tablename">表名称</param>
/// <returns></returns>
public virtual bool TruncateTable(string tablename)
{
return Db.DbMaintenance.TruncateTable(tablename);
} #region CodeFirst 类-->表
/// <summary>
/// 创建单一表
/// </summary>
/// <param name="entityType"></param>
public void CreateTable(Type entityType)
{
Db.CodeFirst.SetStringDefaultLength(200).BackupTable().InitTables(entityType);
} /// <summary>
/// 批量创建表
/// </summary>
/// <param name="entityTypes"></param>
public void CreateTables(Type[] entityTypes)
{
Db.CodeFirst.SetStringDefaultLength(200).BackupTable().InitTables(entityTypes);
}
#endregion #region DbFirst 表-->类
/// <summary>
/// 根据数据库表 生成实体类文件
/// 数据库表名统一格式:XX_XXX 如:Sys_UserInfo
/// </summary>
/// <param name="filePath">类文件地址</param>
/// <param name="nameSpace">命名空间</param>
/// <param name="tableName">表名称</param>
public virtual void CreateClassFiles(string filePath, string nameSpace, string tableName)
{
#region 格式化 实体类文件名称
//循环遍历 数据库里的所有表
foreach (var item in Db.DbMaintenance.GetTableInfoList())
{
string entityName = string.Empty;
if (item.Name.Contains("_"))
{
var tbName = item.Name.Split('_');
entityName = tbName[1] + "Entity";
Db.MappingTables.Add(entityName, item.Name);
}
else
{
entityName = item.Name + "Entity";
Db.MappingTables.Add(entityName, item.Name);
}
//循环遍历 当前表的所有列
foreach (var col in Db.DbMaintenance.GetColumnInfosByTableName(item.Name))
{
//所有列全部转大写
Db.MappingColumns.Add(col.DbColumnName.ToUpper(), col.DbColumnName, entityName);
}
}
#endregion //生成指定表名的实体类文件
if (!string.IsNullOrEmpty(tableName))
{
//生成带有SqlSugar特性的实体类文件
Db.DbFirst.Where(tableName).IsCreateAttribute(true).CreateClassFile(filePath, nameSpace);
}
//生成所有表的实体类文件
else
{
//生成带有SqlSugar特性的实体类文件
Db.DbFirst.IsCreateAttribute(true).CreateClassFile(filePath, nameSpace);
}
}
#endregion
#endregion #region 事务操作
/// <summary>
/// 开启事务
/// </summary>
public virtual void BeginTran()
{
Db.Ado.BeginTran();
} /// <summary>
/// 提交事务
/// </summary>
public virtual void CommitTran()
{
Db.Ado.CommitTran();
} /// <summary>
/// 回滚事务
/// </summary>
public virtual void RollbackTran()
{
Db.Ado.RollbackTran();
}
#endregion #region 原生Sql
/// <summary>
/// 针对于 增删改
/// </summary>
/// <param name="sql"></param>
/// <returns></returns>
public virtual int ExecuteCommand(string sql, params SugarParameter[] pars)
{
return Db.Ado.ExecuteCommand(sql, pars);
} /// <summary>
/// 返回集合
/// </summary>
/// <param name="sql"></param>
/// <returns>返回DataTable</returns>
public virtual DataTable GetDataTable(string sql, params SugarParameter[] pars)
{
return Db.Ado.GetDataTable(sql, pars);
} /// <summary>
/// 返回多个集合
/// </summary>
/// <param name="sql"></param>
/// <param name="pars"></param>
/// <returns></returns>
public virtual DataSet GetDataSet(string sql, params SugarParameter[] pars)
{
return Db.Ado.GetDataSetAll(sql, pars);
} /// <summary>
/// 调用存储过程 返回Output参数
/// </summary>
/// <param name="sql"></param>
/// <param name="pars"></param>
/// <returns>返回int</returns>
public virtual int ExecProcToInt(string sql, params SugarParameter[] pars)
{
int proc_count = 0;
try
{
BeginTran();
proc_count = Db.Ado.UseStoredProcedure().GetInt(sql, pars);
CommitTran();
}
catch (Exception ex)
{
RollbackTran();
throw ex;
} return proc_count;
} /// <summary>
/// 调用存储过程
/// </summary>
/// <param name="sql"></param>
/// <param name="pars"></param>
/// <returns>返回DataTable</returns>
public virtual DataTable ExecProcToDT(string sql, params SugarParameter[] pars)
{
DataTable dt = new DataTable();
try
{
BeginTran();
dt = Db.Ado.UseStoredProcedure().GetDataTable(sql, pars);
CommitTran();
}
catch (Exception ex)
{
RollbackTran();
throw ex;
} return dt;
} /// <summary>
/// 调用存储过程
/// </summary>
/// <param name="sql"></param>
/// <param name="pars"></param>
/// <returns>返回DataSet</returns>
public virtual DataSet ExecProcToDS(string sql, params SugarParameter[] pars)
{
DataSet ds = new DataSet();
try
{
BeginTran();
ds = Db.Ado.UseStoredProcedure().GetDataSetAll(sql, pars);
CommitTran();
}
catch (Exception ex)
{
RollbackTran();
throw ex;
} return ds;
}
#endregion #region 泛型CURD
/// <summary>
/// 校验数据是否存在
/// </summary>
/// <param name="expression">Lambda表达式(查询条件)</param>
/// <returns></returns>
public virtual bool Any<TEntity>(Expression<Func<TEntity, bool>> expression) where TEntity : class, new()
{
return Db.Queryable<TEntity>().Any(expression);
} /// <summary>
/// 检查信息总条数
/// </summary>
/// <param name="expression">Lambda表达式(查询条件)</param>
/// <returns></returns>
public virtual int Count<TEntity>(Expression<Func<TEntity, bool>> expression) where TEntity : class, new()
{
return Db.Queryable<TEntity>().Count(expression);
} /// <summary>
/// 查询实体
/// </summary>
/// <param name="keyValue"></param>
/// <returns>单条记录</returns>
public virtual TEntity FindEntity<TEntity>(object keyValue) where TEntity : class, new()
{
return Db.Queryable<TEntity>().InSingle(keyValue);
} /// <summary>
/// 查询实体集合
/// </summary>
/// <returns></returns>
public virtual ISugarQueryable<TEntity> Queryable<TEntity>() where TEntity : class, new()
{
return Db.Queryable<TEntity>();
} /// <summary>
/// 自定义条件查询
/// </summary>
/// <param name="expression">Lambda表达式(查询条件)</param>
/// <returns></returns>
public virtual ISugarQueryable<TEntity> Queryable<TEntity>(Expression<Func<TEntity, bool>> expression) where TEntity : class, new()
{
return Db.Queryable<TEntity>().Where(expression);
} /// <summary>
/// 通过SQL语句查询
/// </summary>
/// <param name="strSql">SQL语句</param>
/// <returns></returns>
public virtual ISugarQueryable<TEntity> Queryable<TEntity>(string strSql) where TEntity : class, new()
{
return Db.SqlQueryable<TEntity>(strSql);
} /// <summary>
/// 新增
/// </summary>
/// <param name="entity">实体信息</param>
/// <returns></returns>
public virtual int Insertable<TEntity>(TEntity entity) where TEntity : class, new()
{
return Db.Insertable(entity).ExecuteCommand();
} /// <summary>
/// 批量新增
/// </summary>
/// <param name="entities">实体信息集合</param>
/// <returns></returns>
public virtual int Insertable<TEntity>(List<TEntity> entities) where TEntity : class, new()
{
return Db.Insertable(entities).ExecuteCommand();
} /// <summary>
/// 编辑
/// </summary>
/// <param name="entity">实体信息</param>
/// <returns></returns>
public virtual int Updateable<TEntity>(TEntity entity) where TEntity : class, new()
{
return Db.Updateable(entity).IgnoreColumns(ignoreAllNullColumns: true).ExecuteCommand();
} /// <summary>
/// 自定义条件编辑
/// </summary>
/// <param name="content"></param>
/// <param name="predicate"></param>
/// <returns></returns>
public virtual int Updateable<TEntity>(Expression<Func<TEntity, TEntity>> content, Expression<Func<TEntity, bool>> predicate) where TEntity : class, new()
{
return Db.Updateable(content).Where(predicate).ExecuteCommand();
} /// <summary>
/// 删除
/// </summary>
/// <param name="entity">实体信息</param>
/// <returns></returns>
public virtual int Deleteable<TEntity>(TEntity entity) where TEntity : class, new()
{
return Db.Deleteable(entity).ExecuteCommand();
} /// <summary>
/// 自定义条件删除
/// </summary>
/// <param name="expression">Lambda表达式(查询条件)</param>
/// <returns></returns>
public virtual int Deleteable<TEntity>(Expression<Func<TEntity, bool>> expression) where TEntity : class, new()
{
return Db.Deleteable(expression).ExecuteCommand();
}
#endregion
}
}

使用示例

    //数据库上下文 初始化
SqlSugarDbContext db = new SqlSugarDbContext(); #region 原生Sql
var dt = db.GetDataTable(strSql,pars);//返回DataTable
var ds = db.GetDataSet(strSql,pars);//返回DataSet
var count = db.ExcuteCommand(strSql,pars);//针对于增删改,返回受影响行数
...
#endregion #region 泛型CURD
var list = db.Queryable<TEntity>().ToList();//返回集合
var list = db.Queryable<TEntity>(expression).ToList();//返回集合
...
#endregion
...

{% endfolding %}

.Net Core部分

{% folding cyan, 代码 & 使用 %}

完整代码

{% endfolding %}

SqlSugar DbContext的更多相关文章

  1. SqlSugar之DbContext

    创建一个DbContext和DbSet进行使用,我们可以在DbSet中进行扩展我们的方法 //可以直接用SimpleClient也可以扩展一个自个的类 //推荐直接用 SimpleClient //为 ...

  2. SqlSugar ORM 入门到精通【一】入门篇

    背景 SqlSugar是一款国产ORM,除了拥有媲美原生的性能 另外还有满足各种需求的功能,简单好用一分钟就能够轻松上手. 2.x版本正式在自已公司内部项目使用 3.x版本得到了更多公司的喜欢不过也会 ...

  3. SqlSugar ORM 入门篇2 【查询】 让我们实现零SQL

    SqlSugar在查询的功能是非常强大的,多表查询.分页查询 . 一对一查询.二级缓存.一对多查.WhenCase等复杂函数.Mapper功能.和拉姆达自定义扩展等,用好了是可以做到真正零SQL的一款 ...

  4. MongoDB与SqlSugar与Ado.Net对比

    SqlSugar NET 4.+ & .NET CORE 高性能 轻量级 ORM框架,众多.NET框架中最容易使用的数据库访问技术 MongoDB与MySql的安装省略...虽然遇到了一些意外 ...

  5. net core 使用 SqlSugar

    /// <summary> /// SqlSugar 注入Service的扩展方法 /// </summary> public static class SqlSugarSer ...

  6. 使用SqlSugar封装的数据层基类

    首先简单封装了个DbContext public class DbContext { #region 属性字段 private static string _connectionString; /// ...

  7. 使用开源框架Sqlsugar结合mysql开发一个小demo

    一.Sqlsugar简介 1.性能上有很大优势 sqlsugar是性能最好的ORM之一,具有超越Dapper的性能 ,走的是EMIT够构中间语言动态编译到程序集,完成高性能的实体绑定,达到原生水平. ...

  8. C# 数据操作系列 - 15 SqlSugar 增删改查详解

    0. 前言 继上一篇,以及上上篇,我们对SqlSugar有了一个大概的认识,但是这并不完美,因为那些都是理论知识,无法描述我们工程开发中实际情况.而这一篇,将带领小伙伴们一起试着写一个能在工程中使用的 ...

  9. 基于SqlSugar的数据库访问处理的封装,支持多数据库并使之适应于实际业务开发中

    在我的各种开发框架中,数据访问有的基于微软企业库,有的基于EFCore的实体框架,两者各有其应用场景,不过多的去比较.最近在使用SqlSugar的时候,觉得这个数据访问处理的组件确实很灵活,据说性能也 ...

  10. 基于SqlSugar的数据库访问处理的封装,支持.net FrameWork和.net core的项目调用

    由于我们有时候需要在基于.net framework的项目上使用(如Winform端应用),有时候有需要在.net core的项目上使用(如.net core的WebAPI),那么我们把基于SQLSu ...

随机推荐

  1. 从零玩转xxl-job分布式任务调度-xxl-job

    title: 从零玩转xxl-job分布式任务调度 date: 2022-03-18 00:11:55.443 updated: 2023-01-05 10:58:06.991 url: https: ...

  2. 某物流客户Elasticsearch集群性能优化案例

    客户背景 客户使用ES来进行数据存储.快速查询业务订单记录,但是经常会出现业务高峰期ES集群的cpu负载.内存使用均较高,查询延迟大,导致前端业务访问出现大量超时的情况,极大影响其客户使用体验. 部分 ...

  3. Pikachu漏洞靶场 URL重定向

    URL重定向 点击 我就是我,放荡不羁的我 可以发现url是这样的: http://192.168.171.30/pikachu/vul/urlredirect/urlredirect.php?url ...

  4. 平衡树——AVL算法

    平衡树--AVL算法 平衡树建立在二叉搜索树的基础上,加入了两侧子树大小相对平衡的特性而避免了很多情况下的算法退化.这里AVL算法实现的AVL树就是平衡树的一种. 1.二叉搜索树 在说平衡树之前我们得 ...

  5. 异步、多线程、Await/Async、Task

    异步多线程经常被拿来说事,网上文章也是多如牛毛,我也是停留在很菜的水平,痛下决心好好"恶补"一下这块知识. 还是先放两个官方文档压压惊:使用 Async 和 Await 的异步编程 ...

  6. Spring Cloud Eureka 服务注册中心怎么配置

    「Spring Cloud Eureka 入门系列」 Spring Cloud Eureka 入门 (一)服务注册中心详解 Spring Cloud Eureka 入门 (二)服务提供者详解 Spri ...

  7. 带你了解WDR-GaussDB(DWS) 的性能监测报告

    摘要:通过本文,读者可知晓什么是WDR,如何创建性能数据快照以及生成WDR报告. 本文分享自华为云社区<WDR-GaussDB(DWS) 的性能监测报告>,作者:Zhang Jingyao ...

  8. 2021年中国DevOps现状调查报告发布!

    摘要:为进一步了解和掌握DevOps在中国落地实践的现状和未来发展趋势,中国信息通信研究院依托云计算开源产业联盟,此次联合华为云DevCloud等40余家企业共同发起"2021年中国DevO ...

  9. AI论文解读丨融合视觉、语义、关系多模态信息的文档版面分析架构VSR

    摘要:文档版式分析任务中,文档的视觉信息.文本信息.各版式部件间的关系信息都对分析过程具有很重要的作用.本文提出一种融合视觉.文本.关系多模态信息的版式分析架构VSR. 本文分享自华为云社区<论 ...

  10. 从5个函数带你理解K8s DeltaFIFO

    摘要:DeltaFIFO是K8s中用来存储处理数据的Queue,相较于传统的FIFO,它不仅仅存储了数据保证了先进先出,而且存储有K8s资源对象的类型.是连接Reflector(生产者)和indexe ...