当前位置:   article > 正文

.NET -- ORM框架 - SqlSugar_sqlsugarscope

sqlsugarscope

目录

1. 简介

2. Nuget安装

3. Demo开发环境

4. 建立连接

5. Code First

 5.1 实体

 5.2 生成数据库

6. 插入数据

7. 删除数据

8. 更新数据

9. 查询数据

10. 原生SQL

11. 事务

12. IOC注入


1. 简介

     SqlSugar 是一款 老牌 .NET 开源ORM框架,由果糖大数据科技团队维护和更新 ,开箱即用

最易上手的ORM框架 

支持的数据库:MySql、SqlServer、Sqlite、Oracle 、 postgresql等

2. Nuget安装

nuget安装SqlSugarCore

3. Demo开发环境

控制台应用程序

.NET6.0

Mysql:8.0.25

4. 建立连接

  1. public class SqlSugarHelper
  2. {
  3. //相比SqlSugarClient, SqlSugarScope是线程安全的
  4. //用单例模式 SqlSugarScope一直new会内存泄露 一定要用单例
  5. public static SqlSugarScope Db = new SqlSugarScope(new ConnectionConfig()
  6. {
  7. //连接符字串
  8. ConnectionString = "server=localhost;Database=SqlSugarDemo;Uid=root;Pwd=hirosedb;AllowLoadLocalInfile=true;",
  9. //数据库类型
  10. DbType = DbType.MySql,
  11. //不设成true要手动close
  12. IsAutoCloseConnection = true,
  13. },
  14. db =>
  15. {
  16. //(A)全局生效配置点,一般AOP和程序启动的配置扔这里面 ,所有上下文生效
  17. //调试SQL事件,可以删掉
  18. //sql执行前
  19. db.Aop.OnLogExecuting = (sql, pars) =>
  20. {
  21. Console.WriteLine(sql);//输出sql,查看执行sql 性能无影响
  22. };
  23. //sql执行完
  24. db.Aop.OnLogExecuted = (sql, pars) =>
  25. {
  26. Console.WriteLine($"执行时间:{db.Ado.SqlExecutionTime.TotalMilliseconds}");
  27. };
  28. //sql报错
  29. db.Aop.OnError = (exp) =>
  30. {
  31. Console.WriteLine(exp.Sql);
  32. };
  33. });
  34. }

5. Code First

 5.1 实体

  1. [SugarTable("student")] //当实体和数据库表名称不一样时可以设置表别名 指定表名
  2. public class Student
  3. {
  4. [SugarColumn(IsPrimaryKey =true,IsIdentity =true)] //主键、自增
  5. public int Id { get; set; }
  6. [SugarColumn(ColumnName ="StuName")] //数据库与实体不一样设置列名
  7. public string Name { get; set; }
  8. [SugarColumn(IsIgnore =true)] //表示 ORM 所有操作不处理这列 一般用于数据库没有这一列
  9. public int StudentId { get; set; }
  10. }

 5.2 生成数据库

  1. var db = SqlSugarHelper.Db;
  2. //创建数据库,不存在:创建, 存在:不会重复创建
  3. //会根据连接字符串中的数据库进行创建
  4. db.DbMaintenance.CreateDatabase();
  5. //根据实体类创建表
  6. db.CodeFirst.InitTables(typeof(Student));

6. 插入数据

  1. //返回插入行数
  2. var stu2 = new Student() { Name = "eeee" };
  3. db.Insertable(stu2).ExecuteCommand();
  4. //用AS来强制设置表名(默认表名来自实体)
  5. db.Insertable(stu2).AS("student").ExecuteCommand();
  6. //批量插入 List
  7. var stu3 = new List<Student>() { new Student() { Name = "批量1" }, new Student() { Name = "批量2" } };
  8. db.Insertable(stu3).ExecuteCommand();
  9. //异步
  10. await db.Insertable(stu2).ExecuteCommandAsync();

7. 删除数据

  1. //条件删除
  2. db.Deleteable<Student>().Where(it => it.Id == 1).ExecuteCommand();
  3. //根据主键删除
  4. db.Deleteable<Student>().In(2).ExecuteCommand();
  5. //异步 根据主键数组删除
  6. await db.Deleteable<Student>().In(new int[] { 3, 4 }).ExecuteCommandAsync();

8. 更新数据

  1. var stu4 = new Student() { Id=3, Name = "aaaa" };
  2. //根据主键更新单条
  3. db.Updateable(stu4).ExecuteCommand();
  4. var stu5 = new List<Student>() { new Student() { Id = 3, Name = "BBB" }, new Student() { Id = 4, Name = "CCC" } };
  5. //批量更新 List
  6. db.Updateable(stu5).ExecuteCommand();
  7. //异步
  8. await db.Updateable(stu5).ExecuteCommandAsync();
  9. //按条件更新
  10. db.Updateable(stu2).Where(it => it.Id > 5 && it.Id < 10).ExecuteCommand();
  11. //指定某列更新 只更新name条件id=10
  12. db.Updateable<Student>().SetColumns(it => it.Name == "指定列更新").Where(it => it.Id == 10).ExecuteCommand();

9. 查询数据

  1. //查所有
  2. db.Queryable<Student>().ToList();
  3. //按条件
  4. db.Queryable<Student>().Where(it => it.Id > 20).ToList();
  5. //多条件
  6. db.Queryable<Student>().Where(it => it.Id > 10 && it.Name == "eee").ToList();
  7. //查前5条
  8. db.Queryable<Student>().Take(5).ToList();
  9. //动态表达式
  10. Expression<Func<Student,bool>> exp=Expressionable.Create<Student>() //创建表达式
  11. .And(it=>it.Id>10) //逻辑 与
  12. .Or(it=>it.Id==6) //或
  13. .AndIF(true,it=>it.Name.Contains("ee")) //第一个参数是bool类型,即条件为ture 才会执行后面的表达式(第二个参数)
  14. .ToExpression();
  15. var stu7 = db.Queryable<Student>().Where(exp).ToList();
  16. Console.WriteLine(JsonConvert.SerializeObject(stu7));
  17. //异步 在原有方法后面加Async, 加await等待
  18. await db.Queryable<Student>().FirstAsync();
  19. //查询函数 使用SqlFunc这个类调用Sql函数.
  20. //.ToString .Contains .Length.ToLower .ToUpper .ToSubstring .Equals.HasValue.Replace.EndsWith.StartsWith.Trim等
  21. var stu8= db.Queryable<Student>().Where(it => SqlFunc.Contains(it.Name, "ee")).ToList();
  22. Console.WriteLine(JsonConvert.SerializeObject(stu8));

10. 原生SQL

  1. //使用db.Ado
  2. //查询
  3. var sql = "select * from student where id>10";
  4. var stu6= db.Ado.SqlQuery<Student>(sql);
  5. Console.WriteLine(JsonConvert.SerializeObject(stu6));
  6. //插入 更新 删除
  7. sql = "DELETE FROM student WHERE id>30";
  8. db.Ado.ExecuteCommand(sql);

11. 事务

  1. try
  2. {
  3. db.BeginTran();
  4. db.Updateable(new Student() { Id = 2, Name = "update" }).ExecuteCommand();
  5. db.CommitTran();
  6. }
  7. catch (Exception ex)
  8. {
  9. Console.WriteLine($"ex:{ex.Message} st:{ex.StackTrace}" );
  10. db.RollbackTran(); //数据回滚
  11. }

12. IOC注入

nuget安装SqlSugar.IOC

  1. SugarIocServices.AddSqlSugar(new IocConfig()
  2. {
  3. //ConfigId = "db01", 多租户用到
  4. ConnectionString = "server=localhost;Database=SqlSugarDemo;Uid=root;Pwd=hirosedb;",
  5. DbType = IocDbType.MySql,
  6. IsAutoCloseConnection = true,
  7. }); //多个库传入List<IocConfig>
  8. //配置参数
  9. SugarIocServices.ConfigurationSugar(db =>
  10. {
  11. db.Aop.OnLogExecuting = (sql, p) =>
  12. {
  13. Console.WriteLine(sql);
  14. };
  15. });
  16. //注入后使用 DbScoped.SugarScope相当于SqlSugarScope
  17. DbScoped.SugarScope.Insertable(new Student() { Name = "wwww" }).ExecuteCommand();
  18. var stu1 = DbScoped.SugarScope.Queryable<Student>().Where(it => it.Id > 1).ToList();
  19. Console.WriteLine(JsonConvert.SerializeObject(stu1));

参考:SqlSugar ORM 5.X 官网 、文档、教程 - SqlSugar 5x - .NET果糖网 (donet5.com)

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/135112
推荐阅读
相关标签
  

闽ICP备14008679号