2020-11-25

.NET 5 ORM 八大实用技巧 干货

介绍

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}});//库1try{db.BeginTran();db.Deleteable<Order>().ExecuteCommand();db.ChangeDatabase("2");//使用库2db.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       只需你点赞,让我动力十足

 

  









原文转载:http://www.shaoqun.com/a/493021.html

mein:https://www.ikjzd.com/w/1601

vat:https://www.ikjzd.com/w/109

捷汇:https://www.ikjzd.com/w/419


介绍sqlsugar已经在第一时间完美兼容.NET5并且已经有人在使用了,很多人都担心用了开源框架遇到问题无法解决,导致前功尽弃,使用SqlSugar你大可放心,除了有详细文档和几年的大量用户积累,SqlSugar还提供了完整的服务,让您的项目没有后顾之忧优点:简单易用、功能齐全、高性能、轻量级、服务齐全支持数据库:MySql、SqlServer、Sqlite、Oracle、postgresql、
feedback:feedback
粉丝通:粉丝通
深圳野生动物园圣诞节夜场开放时间?2020圣诞节深圳野生动:深圳野生动物园圣诞节夜场开放时间?2020圣诞节深圳野生动
惠州海滨温泉怎么走?:惠州海滨温泉怎么走?
2018年终旺季跨境电商行业"旺季不旺"原因在这!:2018年终旺季跨境电商行业"旺季不旺"原因在这!

No comments:

Post a Comment