介绍
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(newConnectionConfig()
{
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(newStudent()
{
Id=id,
CreateTime=DateTime.Now,
Name= "afterName",
SchoolId= 2})
.EnableDiffLogEvent() //启动日志
.ExecuteCommand();
//删除
db.Deleteable(id)
.EnableDiffLogEvent()//启动日志
.ExecuteCommand();
实践功能3:JSON类型完美支持
SqlSugar不但支持PgSql的Json array类型外,哪怕你的数据库没有JSON类型一样可以使用JSON对象进行存储
ublic classUnitJsonTest
{
[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().ToList();
实践功能4:分库+分表+多库事务
1、动态创建数据库
下面代码将会创建db1和db2数据库
string conn = "server=.;uid=sa;pwd=haosql;database={0}";var db = new SqlSugarClient(newConnectionConfig()
{
DbType=SqlSugar.DbType.SqlServer,
ConnectionString= string.Format(conn, "db1"),
InitKeyType=InitKeyType.Attribute
});
db.DbMaintenance.CreateDatabase();var db2 = new SqlSugarClient(newConnectionConfig()
{
DbType=SqlSugar.DbType.SqlServer,
ConnectionString= string.Format(conn, "db2")
});
db2.DbMaintenance.CreateDatabase();
2、动态建表
下面代码将生成生Order1和Order2 两张表//注意db必须是同一个上下文
var db = new SqlSugarClient(newConnectionConfig()
{
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().AS("Order1").ToList();//查询Order1的表//增 删 改用法和查询一样 Inasertable().AS Deleteable().AS Updateable().As
4、跨库联表查询
var list = db.Queryable((o, i, c) => o.Id == i.OrderId&&c.Id ==o.CustomId)
.AS("xx.order")
.AS("yy.OrderItem")
.AS("zz.Custom")
.Select()
.ToList();
5、多切换
SqlSugarClient db = new SqlSugarClient(new List()
{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().ExecuteCommand();
db.ChangeDatabase("2");//使用库2
db.Deleteable().ExecuteCommand();
db.CommitTran();
}catch{
db.RollbackTran();
}
实践功能5:无限级别的级联插入
使用sqlsugar只需要配置主键,不需要实体配置任何外键关系就能实现级联插入
//有自动赋值的外键
db.Insertable(newOrder()
{
Name= "订单 1",
CustomId= 1,
Price= 100,
CreateTime=DateTime.Now,
Id= 0,//自增列
Items = new List() {newOrderItem(){
CreateTime=DateTime.Now,
OrderId=0,//需要自动获取订单的自增列
Price=1,
ItemId=1}
}
})
.AddSubList(it=> it.Items.First().OrderId )//设置item表的OrderId等于订单自增列
.ExecuteReturnPrimaryKey();
实践功能6:全自动二级缓存
当我们用到Redis等操作时,更新数据时需要及时去清理缓存会变的非常复杂,SqlSugar支持多表缓存,并且更新其中一张表并且能够清除缓存
二缓缓存是将结果集进行缓存,当SQL和参数没发生变化的时候从缓存里面读取数据,减少数据库的读写操作
ICacheService myCache = newHttpRuntimeCache();
SqlSugarClient db= new SqlSugarClient(newConnectionConfig()
{
ConnectionString=Config.ConnectionString,
DbType=DbType.SqlServer,
IsAutoCloseConnection= true,
ConfigureExternalServices= newConfigureExternalServices()
{
DataInfoCacheService= myCache //配置我们创建的缓存类
}
});
db.Queryable().Where(it => it.Id > 0).WithCache().ToList();//设置缓存默认一天
db.Queryable().WithCache(1000).ToList();//设置具体过期时间
删除数据同时更新缓存,插入用和更新也一样的用法
db.Deleteable().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();
if (orderInfo.Columns.Any(it => it.DbColumnName != orderField))
{
throw new Exception("请不要非法注入");
}
db.Queryable().OrderBy(orderField).ToList();
SqlSugar一直在努力的变的更好,所有功能都是来自客户并且经受过长期的用户实践,为了能够给我更多动力