SqlSugar 发布,简单易用的开源 ORM 框架

栏目: 软件资讯 · 发布时间: 3年前

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

介绍

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 

                    https://gitee.com/sunkaixuan/SqlSugar

  


以上所述就是小编给大家介绍的《SqlSugar 发布,简单易用的开源 ORM 框架》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

当下的冲击

当下的冲击

道格拉斯•洛西科夫 (Douglas Rushkoff) / 孙浩 赵晖 / 中信出版社 / 2013-10-1 / 59.00元

这是一个并不符合人本能的社会…… 为什么我们不应该更注重生活的质量而非速度? 为什么我们不用面对面的交流代替冷冰冰电脑屏幕上的文字代码? 为什么我们不可以选择一个虽然有缺陷但有血有肉的人类社会,而非一个虽趋于完美但冷漠的数字世界? 在当下的冲击面前,你正变得越来越弱智:你没有了自己的独特空间,你过多地相信真人秀节目,你成了数字化产品的奴隶并得了数字化精神病,你的生物钟也被打......一起来看看 《当下的冲击》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器