什么是orm数据库框架(SqlSugar发布简单易用的开源)
什么是orm数据库框架(SqlSugar发布简单易用的开源)功能:比大部分的DbHelper性能要高,底层采用Emit动态创建数据绑定程序集进行缓存,缓存后的性能可以达到原生水平,相反原始的Ado需要用到大量装箱和拆箱操作性能反而下降优点: 简单易用、功能齐全、高性能、轻量级、服务齐全支持数据库:MySql、SqlServer、Sqlite、Oracle 、 postgresql、达梦、人大金仓性能:
国内最受欢迎的 ORM 框架,支持.NET CORE 和 MySql、SqlServer、Sqlite、Oracle 、 postgresql 、达梦、人大金仓 数据库,具有EF NH的功能,比EF更人性化的语法,支持真实的批量操作,另外还有媲美DAPPER的性能
一款简单易用的开源ORM框架
很多人都担心用了开源框架遇到问题无法解决,导致前功尽弃,使用SqlSugar你大可放心,除了有详细文档和几年的大量用户积累,
SqlSugar还提供了完整的服务,让您的项目没有后顾之忧
优点: 简单易用、功能齐全、高性能、轻量级、服务齐全
支持数据库:MySql、SqlServer、Sqlite、Oracle 、 postgresql、达梦、人大金仓
性能:
比大部分的DbHelper性能要高,底层采用Emit动态创建数据绑定程序集进行缓存,缓存后的性能可以达到原生水平,相反原始的Ado需要用到大量装箱和拆箱操作性能反而下降
功能:
SqlSugar的功能需求都是来自1000多开发人员的真实项目需求,在这些需求上进行完美的设计,经过5年多的积累,
可以完美满足企业级的所有需求特别是查询功能,支持了各种类型的返回例如DataTable、List、字典等,还支持各种查询,
例如一次查询多个结果集,当然也支持存储过程

通过该功能我们能轻松的监控到执行超过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:支持对数据库的多种操作
    

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官方文档介绍。学习编程知识,可点击:了解更多 即可免费学习编程,跟着老师学习!




