介绍

sqlsugar已经在第一时间完美兼容.NET5并且已经有人在使用了, 很多人都担心用了开源框架遇到问题无法解决,导致前功尽弃,使用SqlSugar你大可放心,除了有详细文档和几年的大量用户积累,

SqlSugar还提供了完整的服务,让您的项目没有后顾之忧

优点: 简单易用、功能齐全、高性能、轻量级、服务齐全

支持数据库:MySql、SqlServer、Sqlite、Oracle 、 postgresql、达梦、人大金仓

免费服务

1、基本用法咨询

2、BUG提交

3、采纳建议和需求

4、代码开源 可用于任何商用项目 不收取费用 下载

5、qq交流群讨论 995692596(空闲) 654015377(1800/2000 拥挤) 726648662((已满) 225982985 (已满)

实践技巧1 :性能监控

通过该功能我们能轻松的监控到执行超过1秒的sql,并且可以拿 到他的 C#代码文件和行数 和方法

  SqlSugarClient db = new SqlSugarClient(new ConnectionConfig()
{
DbType = DbType.SqlServer,
ConnectionString = Config.ConnectionString,
InitKeyType = InitKeyType.Attribute,
IsAutoCloseConnection = true });
db.Aop.OnLogExecuted = (sql, p) =>
{
//执行时间超过1秒
if (db.Ado.SqlExecutionTime.TotalSeconds > 1)
{
//代码CS文件名
var fileName= db.Ado.SqlStackTrace.FirstFileName;
//代码行数
var fileLine = db.Ado.SqlStackTrace.FirstLine;
//方法名
var FirstMethodName = db.Ado.SqlStackTrace.FirstMethodName;
//db.Ado.SqlStackTrace.MyStackTraceList[1].xxx 获取上层方法的信息
}
};

实践功能2:数据变化监控

当我们的代码删了哪具体的代码,添加了具体的代码,修改了哪个列如果没有强大的日志功能将你将无法找回,SqlSugar可以轻松实现高安全级别的数据日志

db.Aop.OnDiffLogEvent = it =>
{
var editBeforeData = it.BeforeData;//操作前记录 包含: 字段描述 列名 值 表名 表描述
var editAfterData = it.AfterData;//操作后记录 包含: 字段描述 列名 值 表名 表描述
var sql = it.Sql;
var parameter = it.Parameters;
var data = it.BusinessData;//这边会显示你传进来的对象
var time = it.Time;
var diffType=it.DiffType;//enum insert 、update and delete //Write logic
}; //添加
db.Insertable(new Student() { Name = "beforeName" })
.EnableDiffLogEvent(new { title="我是插入"}) //启用日志并添加业务对象
.ExecuteReturnIdentity();

//修改
db.Updateable<Student>(new Student()
{
Id = id,
CreateTime = DateTime.Now,
Name = "afterName",
SchoolId = 2
})
.EnableDiffLogEvent() //启动日志
.ExecuteCommand();

//删除
db.Deleteable<Student>(id)
.EnableDiffLogEvent()//启动日志
.ExecuteCommand();

实践功能3:JSON类型完美支持

SqlSugar不但支持PgSql的Json array类型外,哪怕你的数据库没有JSON类型一样可以使用JSON对象进行存储

ublic class UnitJsonTest
{
[SqlSugar.SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
public int Id { get; set; }
[SqlSugar.SugarColumn(ColumnDataType ="varchar(max)", IsJson = true)]
public Order Order { get; set; }
public string Name{get;set;}
}
Db.Insertable(new UnitJsonTest() { Name="json1",Order = new Order { Id = 1, Name = "order1" } }).ExecuteCommand();
var list = Db.Queryable<UnitJsonTest>().ToList();

实践功能4:分库+分表+多库事务

1、动态创建数据库

下面代码将会创建db1和db2数据库

string conn = "server=.;uid=sa;pwd=haosql;database={0}";
var db = new SqlSugarClient(new ConnectionConfig()
{
DbType = SqlSugar.DbType.SqlServer,
ConnectionString = string.Format(conn, "db1"),
InitKeyType=InitKeyType.Attribute
});
db.DbMaintenance.CreateDatabase();
var db2 = new SqlSugarClient(new ConnectionConfig()
{
DbType = SqlSugar.DbType.SqlServer,
ConnectionString = string.Format(conn, "db2")
});
db2.DbMaintenance.CreateDatabase();

2、动态建表

下面代码将生成生Order1和Order2 两张表

//注意db必须是同一个上下文
var db = new SqlSugarClient(new ConnectionConfig()
{
DbType = SqlSugar.DbType.SqlServer,
ConnectionString = ".;xxx",
InitKeyType=InitKeyType.Attribute //这个属性必须这么设置 }); db.MappingTables.Add(typeof(Order).Name, typeof(Order).Name + 1);
db.CodeFirst.InitTables(typeof(Order));
db.MappingTables.Add(typeof(Order).Name, typeof(Order).Name + 2);
db.CodeFirst.InitTables(typeof(Order));

3、实体增、删、查、改

var list= db.Queryable<Order>().AS("Order1").ToList();//查询Order1的表
//增 删 改用法和查询一样 Inasertable().AS Deleteable().AS Updateable().As

4、跨库联表查询

var list = db.Queryable<Order, OrderItem, Custom>((o, i, c) => o.Id == i.OrderId&&c.Id == o.CustomId)
.AS("xx.order")
.AS<OrderItem>("yy.OrderItem")
.AS<Custom>("zz.Custom")
.Select<ViewOrder>()
.ToList();

5、多切换

SqlSugarClient db = new SqlSugarClient(new List<ConnectionConfig>()
{
new ConnectionConfig(){ ConfigId="1", DbType=DbType.SqlServer,
ConnectionString=Config.ConnectionString,InitKeyType=InitKeyType.Attribute,IsAutoCloseConnection=true },
new ConnectionConfig(){ ConfigId="2", DbType=DbType.MySql,
ConnectionString=Config.ConnectionString4 ,InitKeyType=InitKeyType.Attribute ,IsAutoCloseConnection=true}
}); //库1
try
{
db.BeginTran();
db.Deleteable<Order>().ExecuteCommand(); db.ChangeDatabase("2");//使用库2
db.Deleteable<Order>().ExecuteCommand(); db.CommitTran();
}
catch
{
db.RollbackTran();
}

实践功能5:无限级别的级联插入

使用sqlsugar只需要配置主键,不需要实体配置任何外键关系就能实现级联插入

//有自动赋值的外键
db.Insertable(new Order()
{
Name = "订单 1",
CustomId = 1,
Price = 100,
CreateTime = DateTime.Now,
Id = 0,//自增列
Items = new List<OrderItem>() {
new OrderItem(){
CreateTime=DateTime.Now,
OrderId=0,//需要自动获取订单的自增列
Price=1,
ItemId=1
}
}
})
.AddSubList(it => it.Items.First().OrderId )//设置item表的OrderId等于订单自增列
.ExecuteReturnPrimaryKey();

实践功能6:全自动二级缓存

当我们用到Redis等操作时,更新数据时需要及时去清理缓存会变的非常复杂,SqlSugar支持多表缓存,并且更新其中一张表并且能够清除缓存

二缓缓存是将结果集进行缓存,当SQL和参数没发生变化的时候从缓存里面读取数据,减少数据库的读写操作

ICacheService myCache = new HttpRuntimeCache();

  SqlSugarClient db = new SqlSugarClient(new ConnectionConfig()

  {

                ConnectionString = Config.ConnectionString,

                DbType = DbType.SqlServer,

                IsAutoCloseConnection = true,

                ConfigureExternalServices = new ConfigureExternalServices()

                {

                    DataInfoCacheService = myCache //配置我们创建的缓存类

                }

   });

db.Queryable<Student>().Where(it => it.Id > 0).WithCache().ToList();//设置缓存默认一天

db.Queryable<Student>().WithCache(1000).ToList();//设置具体过期时间

删除数据同时更新缓存,插入用和更新也一样的用法

db.Deleteable<Student>().RemoveDataCache().Where(it => it.Id == 1).ExecuteCommand();

//remove所有引用Student表的缓存,包含多表查询

实践功能7:支持对数据库的多种操作

名称 备注 返回类型
GetDataBaseList 获取所有数据库名称 List
GetViewInfoList 获取所有视图 List
GetTableInfoList 获取所有表 List
GetColumnInfosByTableName 获取列根据表名 List
GetIsIdentities 获取自增列 List
GetPrimaries 获取主键 List
IsAnyTable 表是否存在 bool
IsAnyColumn 列是否存在 bool
IsPrimaryKey 主键是否存在 bool
IsIdentity 自增是否存在 bool
IsAnyConstraint 约束是否存在 bool
DropTable 删除表 bool
TruncateTable 清空表 bool
CreateTable 创建列(不建议使用,用CodeFirst建表) bool
AddColumn 添加列 bool
UpdateColumn 更新列 bool
AddPrimaryKey 添加主键 bool
DropConstraint 删除约束 bool
BackupDataBase 备份库 bool
DropColumn 删除列 bool
RenameColumn 重命名列 bool
AddTableRemark 添加表描述 bool
AddColumnRemark 添加列描述 bool
DeleteColumnRemark 删除列描述 bool
RenameTable 重命名表 bool

实践功能8:动态SQL完美防注入方案

var orderField = "order';drop table order";
var orderInfo= db.EntityMaintenance.GetEntityInfo<Order>();
if (orderInfo.Columns.Any(it => it.DbColumnName != orderField))
{
throw new Exception("请不要非法注入");
}
db.Queryable<Order>().OrderBy(orderField).ToList();

SqlSugar一直在努力的变的更好,所有功能都是来自客户并且经受过长期的用户实践,为了能够给我更多动力

原码下载: https://github.com/sunkaixuan/SqlSugar     只需你点赞,让我动力十足

  

.NET 5 ORM 八大实用技巧 干货 - SqlSugar ORM的更多相关文章

  1. js基础进阶--编的实用技巧(一)

    我的个人博客:http://www.xiaolongwu.cn 在平时的开发中,编码技巧很重要,会让你少写很多代码,起到事倍功半的效果. 下面总结几种简单的技巧,大家共同学习一下 1. 利用+.-./ ...

  2. Notepad++ 实用技巧

    Notepad++是一款开源的文本编辑器,功能强大.很适合用于编辑.注释代码.它支持绝大部分主流的编程语言. 本文主要列举了本人在实际使用中遇到的一些技巧. 快捷键 自定义快捷键 首先,需要知道的是: ...

  3. javascript实用技巧、javascript高级技巧

    字号+作者:H5之家 来源:H5之家 2016-10-31 11:00 我要评论( ) 三零网提供网络编程. JavaScript 的技术文章javascript实用技巧.javascript高级技巧 ...

  4. SqlSugar ORM已经支持读写分离

    目前只有MYSQL版 3.5.2.9 支持,其库版本12月3号更新该功能 用例讲解 using (var db = new SqlSugarClient("主连接字符串", &qu ...

  5. Dapper ORM VS SqlSugar ORM的 8场对决

    CUP和.NET SQL版本不同也会存在少许差距,但不会有质变,下面的测试结果仅供参考 比赛规则 1.统一使用Realse版本的最新 DLL,Realse模式启用程序 2.为了平衡CPU和数据库空闲情 ...

  6. iOS开发实用技巧—Objective-C中的各种遍历(迭代)方式

    iOS开发实用技巧—Objective-C中的各种遍历(迭代)方式 说明: 1)该文简短介绍在iOS开发中遍历字典.数组和集合的几种常见方式. 2)该文对应的代码可以在下面的地址获得:https:// ...

  7. iOS开发实用技巧—在手机浏览器头部弹出app应用下载提示

    iOS开发实用技巧—在手机浏览器头部弹出app应用下载提示 本文介绍其简单使用: 第一步:在本地建立一个访问的服务端.  打开本地终端,在本地新建一个文件夹,在该文件夹中存放测试的html页面.   ...

  8. iOS开发实用技巧—项目新特性页面的处理

    iOS开发实用技巧篇—项目新特性页面的处理 说明:本文主要说明在项目开发中会涉及到的最最简单的新特性界面(实用UIScrollView展示多张图片的轮播)的处理. 代码示例: 新建一个专门的处理新特性 ...

  9. IOS 网络浅析-(十三 SDWebImage 实用技巧)

    IOS 网络浅析-(十三 SDWebImage 实用技巧) 首先让我描述一下为了什么而产生的实用技巧.(在TableView.CollectionView中)当用户所处环境WiFi网速不够快(不能立即 ...

随机推荐

  1. 【C++】 C++异常捕捉和处理

    在阅读别人开发的项目中,也许你会经常看到了多处使用异常的代码,也许你也很少遇见使用异常处理的代码.那在什么时候该使用异常,又在什么时候不该使用异常呢?在学习完异常基本概念和语法之后,后面会有讲解. ( ...

  2. 雨露均沾的OkHttp—WebSocket长连接的使用&源码解析

    前言 最近老板又来新需求了,要做一个物联网相关的app,其中有个需求是客户端需要收发服务器不定期发出的消息. 内心OS:

  3. RocketMQ主从搭建

    RocketMQ可分为以下几种模式: 单点模式 主从模式 双从模式 双主双从模式,多主多从模式 搭建主从模式 tar -zxvf rocketmq-4.6.0.tar.gz -C /usr/local ...

  4. buuctf-misc [BJDCTF2020]认真你就输了

    下载压缩包,打开发现有一个10.xls打开一乱码,发现不了头绪,但是发现了pk开头 那我们能不能将这个.xls改成.zip 说干就干,于是我们改成zip解压 打开xl,然后再打开 在chars中发现f ...

  5. python中的多(liu)元(mang)交换 ,赋值

    多元赋值 顾名思义 同时对多个变量赋值 长话短说 举例: int x = 1 int y = 2 x,y = y ,x 这种写法可以直接交换x,y的值 非常方(liu)便(mang) 也就是 y=1 ...

  6. CTF-misc:老板,再来几道misc玩玩

    [BJDCTF 2nd]最简单的misc-y1ng 得到一个图片,提示格式损坏,修补一下文件头 然后得到一张图片 直接python16进制转字符串 >>> string = &quo ...

  7. Java中的微信支付(1):API V3版本签名详解

    1. 前言 最近在折腾微信支付,证书还是比较烦人的,所以有必要分享一些经验,减少你在开发微信支付时的踩坑.目前微信支付的API已经发展到V3版本,采用了流行的Restful风格. 今天来分享微信支付的 ...

  8. python打印水仙花数的个人总结

    面试过程中,提到python,面试最多的就是让你现场写代码实现水仙花.冒泡.九九乘法表,这些面试方法旨在校验面试者的python基础和思维逻辑. 先从水仙花说起,水仙花是指一个n位正整数(n>= ...

  9. 创建本地yum源

    1. 环境准备 在准备搭建yum源的服务器上安装createrepo,打开防火墙的80端口或者关闭防火墙. 注:createrepo命令只要不是最小化安装,都是支持的.如果是最小化安装,下载下图下载r ...

  10. presto 查询每天固定时间段

    select task_id,state,createymd,from_unixtime(createtime) "创建时间",manager_name,open_state,ho ...