<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      SqlSugar基礎用法

      SQLSugar是什么

      **1. 輕量級ORM框架,專為.NET CORE開發人員設計,它提供了簡單、高效的方式來處理數據庫操作,使開發人員能夠更輕松地與數據庫進行交互

      2. 簡化數據庫操作和數據訪問,允許開發人員在C#代碼中直接操作數據庫,而不需要編寫復雜的SQL語句

      3. 支持多種數據庫,包括但不限于MYSQL、SQLSERVER、SQLITE、ORACLE等**

      使用SQLSugar的優點與缺點

      優點:

      1. 高性能:相比EF等ORM框架,SQLSUGAR在性能上表現出色。在大數據的寫入、更新和查詢統計方面,SQLSUGAR的性能是EF的數倍。此外,它在批量操作和一對多查詢上也進行了不錯的SQL優化。

      2. 高擴展性:SQLSUGAR支持自定義拉姆達函數解析、擴展數據類型、自定義實體特性,以及外部緩存等功能,這些都使得其具有較高的可擴展性。

      3. 穩定性:雖然不是官方的ORM框架,但SQLSUGAR在穩定性上也有著數年用戶積累。如果遇到問題,可以在GITHUB上提出,開發者會根據緊急度定期解決。

      4. 功能全面:雖然SQLSUGAR體積小巧,但其功能并不遜色于其他大型ORM框架,如EF。

      5. 生態豐富與多庫兼容:SQLSUGAR支持多種數據庫,為開發者提供了靈活的選擇。同時,它還提供了詳細的文檔、教程以及專業技術支持,為開發者提供了全方位的服務。

      6. 易用性:SQLSUGAR的使用非常簡單,它提供了各種默認值作為最佳配置,開發者只需關注自己的業務邏輯即可。這種易用性大大降低了學習成本,提高了開發效率。

      缺點

      沒啥大缺點

      SQLSugar基礎使用

      安裝SQLSugarCore包

      image

      創建上下文類

      image

      配置鏈接字符串--這塊有點坑、以下這種格式可能會爆錯、SLL證書錯誤

      image

      以下是我的鏈接字符串

      Data Source=.;Initial Catalog=SQLSugarDemo;Integrated Security=True;Trust Server Certificate=True

      image

      注冊SQLSugar--我封裝了Ioc

      image
      image

      在控制器定義方法進行遷移數據庫

      image
      image
      image

      當然你也可以用命令進行遷移

      Sugar遷移命令:
      dotnet ef migrations add 生成文件夾名稱 --project SqlSugarTests.WebAPI.csproj
      dotnet ef database update
      遷移命令有點麻煩還不一定能遷移成功,可以用ef或者方法進行遷移

      以下是基礎用法(增刪改查)

      我大概是給整復雜了,我封裝了一下、我再研究研究給整簡單點

      定義泛型接口

      image

      接口與實現

      image
      ``

      點擊查看代碼
       public interface IRepository<T> where T : class,new()
       {
           // 插入(增)  
           Task<int> Insert(T entity);
           // 根據ID查詢(查)  
           Task<T> GetById(int id);
           //刪除
           Task<int> DeleteById(int id);
      
           // 更新(改)  
           Task<bool> Update(T entity, Expression<Func<T, bool>> whereCondition);
      
           // 刪除(刪)  
           Task<bool> Delete(Expression<Func<T, bool>> whereCondition);
      
           // 查詢(查)  
           Task<T> Get(Expression<Func<T, bool>> whereCondition);
      
           // 查詢列表  
           Task<List<T>> GetAll(Expression<Func<T, bool>> whereCondition = null);
           
       }
      

      image
      ``

      點擊查看代碼
      public class Repository<T> : IRepository<T> where T : class, new()
      {
          private readonly ISqlSugarClient _db;
      
          public Repository(ISqlSugarClient db)
          {
              _db = db;
          }
          // 插入(增)  
          public async Task<int> Insert(T entity)
          {
              try
              {
                  return await _db.Insertable(entity).ExecuteCommandAsync();
              }
              catch (Exception ex)
              {
                  // 處理異常或記錄日志  
                  throw;
              }
          }
          // 更新(改)  
          public async Task<bool> Update(T entity, Expression<Func<T, bool>> whereCondition)
          {
              try
              {
                  var updateable = _db.Updateable(entity).Where(whereCondition);
                  return await updateable.ExecuteCommandAsync() > 0;
              }
              catch (Exception ex)
              {
                  // 處理異常或記錄日志  
                  throw;
              }
          }
          // 刪除(刪)  
          public async Task<bool> Delete(Expression<Func<T, bool>> whereCondition)
          {
              try
              {
                  return await _db.Deleteable<T>().Where(whereCondition).ExecuteCommandAsync() > 0;
              }
              catch (Exception ex)
              {
                  // 處理異常或記錄日志  
                  throw;
              }
          }
          // 查詢(查)  
          public async Task<T> Get(Expression<Func<T, bool>> whereCondition)
          {
              try
              {
                  return await _db.Queryable<T>().Where(whereCondition).SingleAsync();
              }
              catch (Exception ex)
              {
                  // 處理異常或記錄日志  
                  return null;
              }
          }
      
          // 查詢列表  
          public async Task<List<T>> GetAll(Expression<Func<T, bool>> whereCondition = null)
          {
              try
              {
                  var query = _db.Queryable<T>();
                  if (whereCondition != null)
                  {
                      query = query.Where(whereCondition);
                  }
                  return await query.ToListAsync();
              }
              catch (Exception ex)
              {
                  // 處理異常或記錄日志  
                  return null;
              }
          }
          //查詢單個
          public async Task<T> GetById(int id)
          {
              // 使用SQLSugar的Queryable API來獲取單個實體  
              var result = _db.Queryable<T>().InSingle(id);
              // 注意:這里result已經是DepartmentModel的實例或null(如果沒有找到)  
              // 因為InSingle是同步的,所以不需要await  
              return result;
          }
          /// <summary>
          /// 刪除
          /// </summary>
          /// <param name="id"></param>
          /// <returns></returns>
          public async Task<int> DeleteById(int id)
          {
              var result =_db.Deleteable<T>().In(id).ExecuteCommand();
              return result;
          }
      
          #region 其他擴展
          public async Task<bool> Delete<T1>(int id)
          {
              throw new NotImplementedException();
          }
          public async Task<List<T1>> GetAll<T1>()
          {
              throw new NotImplementedException();
          }
          public T1 GetById<T1>(int id)
          {
              throw new NotImplementedException();
          }
          public int Insert<T1>(T1 entity)
          {
              throw new NotImplementedException();
          }
          public bool Update<T1>(T1 entity, int? id = null)
          {
              throw new NotImplementedException();
          }
          #endregion
      
      }
      

      然后我封裝了IocServer

      這段代碼主要做了兩件事:

      將ISqlSugarClient注冊為Scoped服務到依賴注入容器中,并配置了數據庫連接和AOP日志記錄。

      將SqlSugarContext(可能是一個封裝了ISqlSugarClient的上下文類)也注冊為Scoped服務,并確保它能夠從DI容器中獲取到ISqlSugarClient的實例。
      image
      ``

      點擊查看代碼
       public static void AddRepositoryServer(this WebApplicationBuilder builder)
       {
           // 直接注冊 ISqlSugarClient 到 DI 容器  
           builder.Services.AddScoped<ISqlSugarClient>(sp => new SqlSugarClient(new ConnectionConfig()
           {
               ConnectionString = builder.Configuration.GetConnectionString("SQLSugar"), //數據庫連接串
               DbType = DbType.SqlServer,      //數據庫類型
               IsAutoCloseConnection = true, //自動釋放
               MoreSettings = new ConnMoreSettings()
               {
                   SqlServerCodeFirstNvarchar = true,//建表字符串默認Nvarchar
               }
           }, db =>
           {
               db.Aop.OnLogExecuting = (sql, pars) =>
               {
                   Console.WriteLine(sql);//生成執行Sql語句
               };
           }
           ));
           builder.Services.AddScoped<SqlSugarContext>(sp => new SqlSugarContext(sp.GetRequiredService<ISqlSugarClient>()));
       }
      

      在Program進行注冊

      image

      控制器里使用

      image
      ``

      點擊查看代碼
      public readonly SqlSugarContext db;
      private readonly IRepository<DepartmentModel> _repository;
      public SQLSugarController(SqlSugarContext context, IRepository<DepartmentModel> repository)
      {
      
          this.db = context;
          this._repository = repository;
      }
      /// <summary>
      /// 創建表
      /// </summary>
      /// <returns></returns>
      [HttpGet("CreateTable")]
      public IActionResult CreateTable()
      {
          db.CreateTable();
          return Ok("執行成功!");
      }
      // 添加部門  
      [HttpPost("AddDepartment")]
      public async Task<IActionResult> AddDepartment([FromBody] DepartmentModel departmentModel)
      {
          if (ModelState.IsValid)
          {
              int result = await _repository.Insert(departmentModel);
              if (result > 0)
              {
                  return Ok(new { message = "部門添加成功", departmentId = departmentModel.DepartMentId });
              }
              else
              {
                  return BadRequest(new { message = "部門添加失敗" });
              }
          }
          else
          {
              return BadRequest(ModelState);
          }
      }
      
      // 更新部門  
      [HttpPut("UpdateDepartment")]
      public async Task<IActionResult> UpdateDepartment(int id, [FromBody] DepartmentModel departmentModel)
      {
          if (ModelState.IsValid && departmentModel.DepartMentId == id)
          {
              bool result = await _repository.Update(departmentModel);
              if (result)
              {
                  return Ok(new { message = "部門更新成功" });
              }
              else
              {
                  return BadRequest(new { message = "部門更新失敗" });
              }
          }
          else
          {
              return BadRequest(ModelState);
          }
      }
      
      // 刪除部門  
      [HttpDelete("DeleteDepartment")]
      public async Task<IActionResult> DeleteDepartment(int id)
      {
          int result = await _repository.DeleteById(id);
          if (result!=0)
          {
              return Ok(new { message = "部門刪除成功" });
          }
          else
          {
              return NotFound(new { message = "未找到要刪除的部門" });
          }
      }
      [HttpGet("GetDepartment")]
      public async Task<IActionResult> GetDepartment(int id)
      {
          DepartmentModel department = await _repository.GetById(id);
          if (department != null)
          {
              // 將DepartmentModel轉換為DepartmentDto,這里只是一個簡單的示例  
              //var departmentDto = new DepartmentDto { DepartMentId = department.DepartMentId };
              return Ok(department);
          }
          else
          {
              return NotFound(new { message = "未找到要獲取的部門" });
          }
      }
      // 獲取所有部門  
      [HttpGet("GetAllDepartments")]
      public async Task<IActionResult> GetAllDepartments()
      {
          List<DepartmentModel> departments = await _repository.GetAll();
          return Ok(departments);
      }
      

      官方網站:
      果糖網: https://www.donet5.com/
      這只是基礎的使用,后續我也會發進階用法,小伙伴們自己研究吧!加油、未來可期

      posted @ 2024-06-13 10:28  北落師門、  閱讀(765)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 亚洲精品久荜中文字幕| 人人人澡人人肉久久精品| 国产喷水1区2区3区咪咪爱AV| 好吊妞| 国精偷拍一区二区三区| 唐人社视频呦一区二区| 国产影片AV级毛片特别刺激| 精品亚洲国产成人av| 亚洲尤码不卡av麻豆| 色欲久久综合亚洲精品蜜桃| 亚洲天堂一区二区成人在线| 亚洲自拍偷拍激情视频| 色综合久久婷婷88| 韩国19禁无遮挡啪啪无码网站| 中文国产人精品久久蜜桃| 国产精品高清中文字幕| 乱码视频午夜在线观看| 久久一亚色院精品全部免费| 精品久久人人妻人人做精品| 日韩一区二区三区日韩精品| 国产亚洲婷婷香蕉久久精品 | 中文字幕第一页亚洲精品| 中文字幕国产精品av| 亚洲 一区二区 在线| 国产乱妇乱子视频在播放| 亚洲一卡2卡3卡4卡精品| 亚洲高清日韩专区精品| 亚洲A综合一区二区三区| 国产精品麻豆va在线播放| 吃奶还摸下面动态图gif| 国产成人精品1024免费下载| 国产性色av高清在线观看 | 亚洲制服无码一区二区三区| 亚洲区成人综合一区二区| 婷婷丁香五月激情综合| 日韩在线观看精品亚洲| 永久免费无码av在线网站| 成人福利国产午夜AV免费不卡在线| 亚洲色精品vr一区区三区| 岛国av无码免费无禁网站| 精品国产自线午夜福利|