SqlSugar, .net core orm

前言

SqlSugar 是一款非常好用的.net orm, 支持 .net 和 .net core 。 我们公司多个 .net 项目都是用这个orm的,实践证明该ORM非常不错。

下面是引用自官网

很多人都会问您这款ORM有哪些特点,有什么竞争力,我归纳出以上几点供你参考

1、高性能 ,不夸张的说,去掉Sql在数据库执行的时间,SqlSugar是EF数倍性能,另外在批量操作和一对多查询上也有不错的SQL优化

2、高扩展性 ,支持自定义拉姆达函数解析、扩展数据类型、支持自定义实体特性,外部缓存等

3、稳定性和技术支持, 虽然不是官方ORM, 但在稳定性上也是有着数年用户积累,如果遇到问题可以在GITHUB提出来,会根据紧急度定期解决

4、功能全面,虽然SqlSugar小巧可功能并不逊色于EF框架

5、创新、持续更新 ,向下兼容

开始

创建sqlClient对象 (.net core 支持依赖注入)

SqlSugarClient db = new SqlSugarClient(
    new ConnectionConfig()
    {
        ConnectionString = "server=.;uid=sa;pwd=@jhl85661501;database=SqlSugar4XTest",
        DbType = DbType.SqlServer,//设置数据库类型
        IsAutoCloseConnection = true,//自动释放数据务,如果存在事务,在事务结束后释放
        InitKeyType = InitKeyType.Attribute //从实体特性中读取主键自增列信息
    });

打印日志

//用来打印Sql方便你调式    
db.Aop.OnLogExecuting = (sql, pars) =>
        {
            Console.WriteLine(sql + "\r\n" + 
            db.Utilities.SerializeObject(pars.ToDictionary(it => it.ParameterName, it => it.Value)));
            Console.WriteLine();
        };    

增删查改:

/*查询*/
var list = db.Queryable<StudentModel>().ToList();//查询所有
var getById = db.Queryable<StudentModel>().InSingle(1);//根据主键查询
var getByWhere = db.Queryable<StudentModel>().Where(it=>it.Id==1).ToList();//根据条件查询
var total = 0;
var getPage = db.Queryable<StudentModel>().Where(it => it.Id == 1).ToPageList(1,2,ref total);//根据分页查询
//多表查询用法 http://www.codeisbug.com/Doc/8/1124
 
/*插入*/
var data = new Student() { Name = "jack" };
db.Insertable(data).ExecuteCommand();
//更多插入用法 http://www.codeisbug.com/Doc/8/1130
 
/*更新*/
var data2 = new Student() { Id =1, Name = "jack" };
db.Updateable(data2).ExecuteCommand();
//更多更新用法 http://www.codeisbug.com/Doc/8/1129
 
/*删除*/
db.Deleteable<StudentModel>(1).ExecuteCommand();
//更多删除用法 http://www.codeisbug.com/Doc/8/1128

执行sql

var t12 = db.SqlQueryable<Student>("select * from student").Where(it=>it.id>0).ToPageList(1, 2);

var t12 = db.SqlQueryable<dynamic>("select * from student").ToPageList(1, 2);//返回动态类型

生成实体类

db.DbFirst.CreateClassFile("c:\\Demo\\1",命名空间);

2分钟深入:

public class DbContext
{
    public DbContext()
    {
        Db = new SqlSugarClient(new ConnectionConfig()
        {
            ConnectionString = "server=.;uid=sa;pwd=@jhl85661501;database=SqlSugar4XTest",
            DbType = DbType.SqlServer,
            InitKeyType = InitKeyType.Attribute,//从特性读取主键和自增列信息
            IsAutoCloseConnection = true,//开启自动释放模式和EF原理一样我就不多解释了
 
        });
        //调式代码 用来打印SQL 
        Db.Aop.OnLogExecuting = (sql, pars) =>
        {
            Console.WriteLine(sql + "\r\n" +
                Db.Utilities.SerializeObject(pars.ToDictionary(it => it.ParameterName, it => it.Value)));
            Console.WriteLine();
        };
 
    }
    //注意:不能写成静态的,不能写成静态的
    public SqlSugarClient Db;//用来处理事务多表查询和复杂的操作
    public SimpleClient<Student> StudentDb { get { return new SimpleClient<Student>(Db); } }//用来处理Student表的常用操作
    public SimpleClient<School> SchoolDb { get { return new SimpleClient<School>(Db); } }//用来处理School表的常用操作
}
	

public class DemoManager : DbContext//继承DbContext
{
 
 
    //SimpleClient实现查询例子
    public void SearchDemo()
    {
 
        var data1 = StudentDb.GetById(1);//根据ID查询
        var data2 = StudentDb.GetList();//查询所有
        var data3 = StudentDb.GetList(it => it.Id == 1);  //根据条件查询  
        var data4 = StudentDb.GetSingle(it => it.Id == 1);//根据条件查询一条
 
        var p = new PageModel() { PageIndex = 1, PageSize = 2 };// 分页查询
        var data5 = StudentDb.GetPageList(it => it.Name == "xx", p);
        Console.Write(p.PageCount);//返回总数
 
 
        // 分页查询加排序
        var data6 = StudentDb.GetPageList(it => it.Name == "xx", p, it => it.Name, OrderByType.Asc);
        Console.Write(p.PageCount);//返回总数
 
 
        //组装条件查询作为条件实现 分页查询加排序
        List<IConditionalModel> conModels = new List<IConditionalModel>();
        conModels.Add(new ConditionalModel() { FieldName = "id", ConditionalType = ConditionalType.Equal, FieldValue = "1" });//id=1
        var data7 = StudentDb.GetPageList(conModels, p, it => it.Name, OrderByType.Asc);
         
        //4.9.7.5支持了转换成queryable,我们可以用queryable实现复杂功能
         StudentDb.AsQueryable().Where(x => x.Id == 1).ToList();
    }
 
 
    //插入例子
    public void InsertDemo()
    {
 
        var student = new Student() { Name = "jack" };
        var studentArray = new Student[] { student };
 
        StudentDb.Insert(student);//插入
 
        StudentDb.InsertRange(studentArray);//批量插入
 
        var id = StudentDb.InsertReturnIdentity(student);//插入返回自增列
         
        //4.9.7.5我们可以转成 Insertable实现复杂插入
        StudentDb.AsInsertable(insertObj).ExecuteCommand();
    }
 
 
    //更新例子
    public void UpdateDemo()
    {
        var student = new Student() { Id = 1, Name = "jack" };
        var studentArray = new Student[] { student };
 
        StudentDb.Update(student);//根据实体更新
 
        StudentDb.UpdateRange(studentArray);//批量更新
 
        StudentDb.Update(it => new Student() { Name = "a", CreateTime = DateTime.Now }, it => it.Id == 1);// 只更新Name列和CreateTime列,其它列不更新,条件id=1
     
        //支持StudentDb.AsUpdateable(student)
    }
 
    //删除例子
    public void DeleteDemo()
    {
        var student = new Student() { Id = 1, Name = "jack" };
 
        StudentDb.Delete(student);//根据实体删除
        StudentDb.DeleteById(1);//根据主键删除
        StudentDb.DeleteById(new int[] { 1,2});//根据主键数组删除
        StudentDb.Delete(it=>it.Id==1);//根据条件删除
         
        //支持StudentDb.AsDeleteable()
    }
 
    //使用事务的例子
    public void TranDemo()
    {
 
        var result = Db.Ado.UseTran(() =>
        {
            //这里写你的逻辑
        });
        if (result.IsSuccess)
        {
            //成功
        }
        else
        {
            Console.WriteLine(result.ErrorMessage);
        }
    }
 
}

结束

参考资料

官网 http://www.codeisbug.com/

git https://github.com/sunkaixuan/sqlsugar/

发布了133 篇原创文章 · 获赞 105 · 访问量 30万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览