真正实现零sql
 查询速度快于EF
 支持【低代码】模式
 支持多种数据库
使用配置
- 根据使用需求导入NuGet包 .net core SqlSugarCore或者 .net frameworkSqlSugar
- 配置文件appsettings.json设置链接字符串

"ConnectionStrings": {
    "sqlcon": "Server=.;User Id=sa;Password=123456;Database=UserSetting;Persist Security Info=True;Encrypt=false"
  },- 声明静态类服务 扩展功能(类似于链接数据库操作)

其他配置不需要改动(可以直接粘贴说明文档中的方法,只需要改动标注部分)
public static class SqlSugarSetup
	{
		public static void AddSqlsugarSetup(this IServiceCollection services, IConfiguration configuration, string dbName = "sqlcon")
		{
			//如果多个数数据库传 List<ConnectionConfig>
			var configConnection = new ConnectionConfig()
			{
				DbType = SqlSugar.DbType.SqlServer,//链接的数据库类型
				ConnectionString = configuration.GetConnectionString(dbName),
				IsAutoCloseConnection = true,
			};
			SqlSugarScope sqlSugar = new SqlSugarScope(configConnection, /*单例注册参数配置服务*/
				db =>
				{
					//单例参数配置,所有上下文生效
					db.Aop.OnLogExecuting = (sql, pars) =>
					{
						//Console.WriteLine(sql);//输出sql
					};
				});
			services.AddSingleton<ISqlSugarClient>(sqlSugar);//这边是SqlSugarScope用AddSingleton
		}
	}- 入口文件 注册SqlSugar服务
- 根据创建完成 SqlSugarSetup类=>
- 在Program.cs中引用Models(因为案例是创建的功能类,在Models下(需要进行引用))=>
- 注册服务(并且将配置文件传递给注册的功能类)
配置完成,可以进行使用了!
简单使用
DbFirst生成实体类
ISqlSugarClient是一个.NET标准库,提供了一种简单易用的方式来与SQL数据库进行交互,使用的是SugarORM ORM库。它允许您执行SQL查询、插入、更新和删除数据,并使用LINQ表达式从数据库中检索数据。
- 通过依赖注入使用SqlSugar
//依赖注入SqlSugar
public readonly ISqlSugarClient db;
public UserController(ISqlSugarClient sugarClient)
{
	db = sugarClient;
}
//创建实体类
//创建类的文件 调用时创建(只创建一次) 第一个参数是地址,第二个参数是命名空间
db.DbFirst.CreateClassFile(@"D:\wuhan\.NET Core\Use_SqlSugar240102\Use_SqlSugar240102\Models","Models");CodeFist生成数据库表(待补充)
操作数据库
操作数据库可以查询官方文档很全,以下举了一些例子
辅助文档官方文档安装使用SqlSugarFree Sql
查询
查询条数
//查询条数
int lcounnt=db.Queryable<UserInfo>().Count();查询单表(带where条件)多条件使用&&链接
//查询单表(带where条件)多条件使用&&链接
var list1= db.Queryable<UserInfo>().Where(u => u.uid < 3 && u.phone!="11111111111").ToList();动态or查询
//动态or查询 OrIF(只有符合条件才会拼接or后面的语句)
//作为查询语句的一部分 OrIF(or) AndIF(and)
var exp = Expressionable.Create<UserInfo>().OrIF(vadata.role_id > 0, u => u.role_id == vadata.role_id);
exp.AndIF(!string.IsNullOrEmpty(vadata.uname), u => u.uname.Contains(vadata.uname));在 SQLSugar 中,
Expressionable.Create<Student>()是用来创建一个ICache<T>接口的实例,用于在后续操作中进行缓存操作。
Student 类型的实体对象将会被序列化为数据库中的 SQL 语句和参数,以便进行数据库操作。Expressionable.Create<Student>()方法的作用是返回一个 Expression 对象,该对象表示了一个类型为 Student 的实体对象的表达式。
通过这个表达式,我们可以对实体对象进行操作,例如设置属性值、调用方法等,这些操作最终会被序列化为数据库操作的 SQL 语句和参数,从而实现对实体对象的数据库操作。Expressionable.Create<Student>()方法是 SQLSugar 中一个非常重要的方法,用于创建实体对象的表达式,从而进行数据库操作。
联表查询
LeftJoin左连接 RightJoin右连接
//联表查询
var list =db.Queryable<UserInfo>().Where(exp.ToExpression()).LeftJoin<RoleInfo>((u, r) => (u.role_id == r.rid))
	.Select((u, r) => new
	{
		u.uid,
		u.uname,
		u.phone,
		r.rname,
		u.isautonym
	}).ToPageList(page, limit, ref count).ToList();in查询
string[] ids = id.Split(',');
//in 查询
List<UserInfo> usi= db.Queryable<UserInfo>().Where(it => ids.Contains(it.uid.ToString())).ToList();添加
忽略插入某几列
//忽略 name testid ExecuteReturnIdentity() 返回主键值
db.Insertable(insertObj).IgnoreColumns("Name", "TestId").ExecuteReturnIdentity();
//忽略uid 返回影响行数
n = db.Insertable(u).IgnoreColumns(i => i.uid).ExecuteCommand();有主键的表的插入(需要声明主键,进行实体配置)
需要对实体模型进行配置主键及自增特性

//操作添加
n = db.Insertable<UserInfo>(u).ExecuteCommand();//模型类
[SugarColumn(IsPrimaryKey = true,IsIdentity =true)]无实体插入中 匿名对象创建
db.InsertableByDynamic(new   { name="",price=1 }).AS("OrderInfo").ExecuteCommand();修改(需要声明主键,进行实体配置)
db.Updateable(u).ExecuteCommand();null值列不更新(并且数据库存在默认值为0时也不更新)
db.Updateable(u).IgnoreColumns(ignoreAllNullColumns: true, ignoreAllDefaultValue: true).ExecuteCommand();只修改某几列
var result=db.Updateable(u).UpdateColumns(it => new { ,it.CreateTime }).ExecuteCommand();忽略修改某几列
var result=db.Updateable(u).IgnoreColumns(it => new { it.CreateTime,it.TestId }).ExecuteCommand()添加或修改(自判断)
如果主键=0/null 表示插入 否则为修改
//u为修改的实体模型
db.Storageable(u).DefaultAddElseUpdate().ExecuteCommand();删除
int id=10;
//uid为数据库中的字段 删除单条
int n=db.Deleteable<UserInfo>(new UserInfo {uid=id }).ExecuteCommand();
//删除集合
string[] ids = id.Split(',');
List<UserInfo> ulist= db.Queryable<UserInfo>().Where(it => ids.Contains(it.uid.ToString())).ToList();
db.Deleteable<UserInfo>(ulist).ExecuteCommand();
//根据主键
db.Deleteable<Student>().In(1).ExecuteCommand();
 
//无主键用法
db.Deleteable<Order>().In(it=>,1).ExecuteCommand();
//根据主键数组
db.Deleteable<Student>().In(new int[] { 1, 2 }).ExecuteCommand();
 
//无主键用法
db.Deleteable<Student>().In(it=>,new int[] { 1, 2 }).ExecuteCommand();
 
//Oracle用户注意:这种方式只能删除1000,用达式方式.Where(it=>ids.Contains()支持1000以上
//根据表达式
db.Deleteable<Student>().Where(it =>  == 1).ExecuteCommand();执行sql语句(通常用于插入/更新)
//调用sql语句
db.Ado.ExecuteCommand($" insert into UserInfo values('{u.nikename}','{u.uname}','{u.phone}',{u.role_id},{u.isautonym},'{u.authority}','{u.wids}')");调用存储过程
//简单用法
var dt = db.Ado.UseStoredProcedure().GetDataTable("sp_school",new{name="张三",age=0});                
 
 
                     
            
        













 
                    

 
                 
                    