.NET倉儲層在 using 塊中創建 SqlSugarClient 的風險

如題,先看代碼示例 using 塊的使用

public ISugarQueryable<T> GetSet(Expression<Func<T, bool>> whereExpression = null)
{using (SqlSugarClient dbClient = SqlSugarInstance.GetInstance()){var query = dbClient.Queryable<T>();if (whereExpression != null){query = query.Where(whereExpression);}return query;}
}

使用 using 導致返回的 ISugarQueryable<T> 會因為連接釋放而失效

你在 using 塊中創建了 SqlSugarClient,然后返回了基于它創建的 ISugarQueryable<T>。但 using 會在方法結束時釋放資源,這意味著你返回的查詢對象里的連接已經被釋放,后續在調用 .ToList().First() 等方法時會拋異常或行為不確定。


🎯 調用方寫法

var entity = _IWI_ZoneFolderRepository.GetSet(s => s.ZoneFolderCode.Equals(zoneFolderRemoveModel.FolderCode)).Take(1).ToList().FirstOrDefault();

🎯 為什么現在沒出問題?

因為 SqlSugar 的 ISugarQueryable<T> 是個延遲執行(lazy evaluation)的查詢對象,但你在調用完 .GetSet()馬上調用了 .Take(1).ToList(),所以真正執行 SQL 查詢的時機仍然落在了 using 塊內部那條連接還有效的時候。

這就像是:

var query = db.Queryable<T>(); // 還沒執行 SQL
var result = query.ToList();   // 這才執行 SQL,必須連接還活著

你現在這用法,是 立即執行型消費,所以目前沒翻車。


? 最保險的寫法

你有兩種路徑:

方式 1:調用者控制連接(推薦)

public ISugarQueryable<T> GetSet(SqlSugarClient dbClient, Expression<Func<T, bool>> where = null)
{var query = dbClient.Queryable<T>();if (where != null) query = query.Where(where);return query;
}

然后在調用方:

using var db = SqlSugarInstance.GetInstance();
var entity = _repo.GetSet(db, x => x.Id == 1).Take(1).ToList().FirstOrDefault();

方式 2:改為立即執行,返回結果

public T GetOne(Expression<Func<T, bool>> where)
{using var db = SqlSugarInstance.GetInstance();return db.Queryable<T>().Where(where).FirstOrDefault();
}

? 總結建議

情況建議做法
想要返回 ISugarQueryable<T>不要在方法內部 using 釋放連接
想在方法里執行查詢使用 ToList() / FirstOrDefault() 立即執行,返回結果
想安全復用查詢表達式由調用方提供 SqlSugarClient,連接生命周期在外層控制

🔍using 塊的本意請參考這篇

.NET下 using 塊的作用-CSDN博客

僅供學習參考?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/902969.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/902969.shtml
英文地址,請注明出處:http://en.pswp.cn/news/902969.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C語言----函數棧幀講解

目錄 1.函數棧幀是什么? 2. 理解函數棧幀能解決什么問題 3、函數棧幀的創建和銷毀具體過程 3.1 什么是棧 3.2 認識相關寄存器和匯編指令 3.3函數棧幀的創建和銷毀 3.3.1 預備知識 3.3.2 函數的調用堆棧 3.3.3 準備環境 3.3.4 轉到反匯編 3.3.5 函數棧幀的創建 3.3…

代碼隨想錄學習筆記---二叉樹

學習目標&#xff1a; 學習代碼隨想錄–二叉樹 每天學習1道,復習兩道 學習內容&#xff1a; 2025.4.7 復習內容: 24. 兩兩交換鏈表中的節點 25. 最大二叉樹 學習內容 26. 合并二叉樹 2025.4.8 復習內容: 27. 二分查找 28. 合并二叉樹 29. 27. 移除元素 學習內容: 30. 二叉…

Git ——提交至github,Vercel拉取,更新不了項目的問題解決

首先因為github上有個錯誤 1 failing check Vercel - No GitHub account was found matching the commit author email address 發現好像是vercel拉取不了項目&#xff0c;vercel登錄的郵箱與我此次提交更改的郵箱不匹配&#xff0c;查看Git的user確實如此&#xff08;之前的…

Vue3項目中 npm 依賴安裝 --save 與 --save-dev 的區別解析

這兩個命令的區別如下&#xff1a; bash npm install --save types/crypto-js # 安裝到 dependencies&#xff08;生產依賴&#xff09; npm install --save-dev types/crypto-js # 安裝到 devDependencies&#xff08;開發依賴&#xff09; 核心區別 依賴分類不同…

品牌如何通過朝日新聞出海日本?——某企業日本媒體發稿實戰

文 | 言同數字亞太傳播實驗室 一、日本市場的隱形門檻&#xff1a;中國品牌的三大痛點 案例背景&#xff1a; 某中國靈芝保健品企業&#xff08;代號"ForestLife"&#xff09;&#xff0c;產品雖獲中國/歐盟有機認證&#xff0c;但在日本市場面臨&#xff1a; 認知…

鴻蒙-試一下屬性字符串:除了Span之外,如何在同一個Text組件中展示不同樣式的文字

文章目錄 前言簡介有哪些類型拉出來溜溜Text SpanStyledString其他CustomSpan先看一下構造函數onMeasure(measureInfo: CustomSpanMeasureInfo): CustomSpanMetricsonDraw(context: DrawContext, drawInfo: CustomSpanDrawInfo) 遺留問題 前言 在開發中&#xff0c;經常會遇到…

Nginx 安裝與配置全流程指南(2025 最新版)

一、環境準備與依賴安裝 1.1 系統要求 操作系統&#xff1a;支持主流 Linux 發行版&#xff08;Ubuntu 20.04/CentOS 7/Debian 10&#xff09;硬件配置&#xff1a;內存 ≥512MB&#xff0c;磁盤 ≥10GB 可用空間&#xff08;建議使用 SSD&#xff09;網絡要求&#xff1a;開…

【LeetCode 熱題 100】滑動窗口最大值 / 最小覆蓋子串 / 輪轉數組 / 缺失的第一個正數

??個人主頁&#xff1a;小羊 ??所屬專欄&#xff1a;LeetCode 熱題 100 很榮幸您能閱讀我的文章&#xff0c;誠請評論指點&#xff0c;歡迎歡迎 ~ 目錄 子串和為 K 的子數組滑動窗口最大值最小覆蓋子串 普通數組最大子數組和合并區間輪轉數組除自身以外數組的乘積缺失的…

golang的cgo的一點小心得

最后有個項目需要涉及到cgo&#xff0c;在這塊以前用的不多&#xff0c; 這次略微用得深入了一點&#xff0c;記下來幾點以備以后使用 本質上cgo去用的時候就是遵守一些ABI而已&#xff0c;總體而言&#xff0c;盡量避免復雜結構的來回傳遞。1 對于變長參數&#xff0c;只有…

異構網絡環境下的切換策略研究

移動互聯網應用快速崛起,現有的無線接入技術有,無線局域網(Wireless Local Area NetWork,WLAN),移動蜂窩網絡(4G,5G),無線廣域網(Wireless Wide Area Network,WWAL)以及衛星通信網絡等。多接入技術方便用戶通信,還符合多業務場景。這種多無線接入技術共存的網絡環…

人工智能賦能美妝零售數字化轉型:基于開源AI大模型的S2B2C商城系統構建

摘要 在消費升級背景下&#xff0c;美妝行業正經歷從傳統賣場向智能體驗空間的轉型。本文以"未來商店"為研究對象&#xff0c;探討開源AI大模型與S2B2C商城系統的協同效應&#xff0c;揭示人工智能技術如何重構"人-貨-場"關系。通過實證研究發現&#xff…

計算機視覺中的正則化:從理論到實踐的全面解析

&#x1f31f; 計算機視覺中的正則化&#xff1a;從理論到實踐的全面解析&#x1f31f; 大家好&#xff01;今天要和大家分享的是在計算機視覺&#xff08;CV&#xff09;領域中非常重要的一個概念——正則化&#xff08;Regularization&#xff09;。無論你是剛開始接觸深度學…

Linux字符設備驅動開發的詳細步驟

1. 確定主設備號?? ??手動指定??&#xff1a;明確設備號時&#xff0c;使用register_chrdev_region()靜態申請&#xff08;需確保未被占用&#xff09;。??動態分配??&#xff1a;通過alloc_chrdev_region()由內核自動分配主設備號&#xff08;更靈活&#xff0c;推…

軟件工程效率優化:一個分層解耦與熵減驅動的系統框架

軟件工程效率優化&#xff1a;一個分層解耦與熵減驅動的系統框架** 摘要 (Abstract) 本報告構建了一個全面、深入、分層的軟件工程效率優化框架&#xff0c;旨在超越簡單的技術羅列&#xff0c;從根本的價值驅動和熵減原理出發&#xff0c;系統性地探討提升效率的策略與實踐。…

【Docker游戲】使用Docker部署vue-XiuXianGame文字修仙小游戲

【Docker游戲】使用Docker部署vue-XiuXianGame文字修仙小游戲 一、vue-XiuXianGame介紹1.1 vue-XiuXianGame簡介1.2 主要特點 二、本次實踐規劃2.1 本地環境規劃2.2 本次實踐介紹 三、本地環境檢查3.1 檢查Docker服務狀態3.2 檢查Docker版本3.3 檢查docker compose 版本 四、拉…

用 LangChain 手搓 RAG 系統:從原理到實戰

一、RAG 系統簡介 在當今信息爆炸的時代&#xff0c;如何高效地從海量數據中獲取有價值的信息并生成準確、自然的回答&#xff0c;成為了人工智能領域的重要課題。檢索增強生成&#xff08;Retrieval-Augmented Generation&#xff0c;RAG&#xff09;系統應運而生&#xff0c;…

SpringBoot集成LiteFlow實現輕量級工作流引擎

LiteFlow 是一款專注于邏輯驅動流程編排的輕量級框架&#xff0c;它以組件化方式快速構建和執行業務流程&#xff0c;有效解耦復雜業務邏輯。通過支持熱加載規則配置&#xff0c;開發者能夠即時調整流程步驟&#xff0c;將復雜的業務如價格計算、下單流程等拆分為獨立且可復用的…

38 python random

在實際中,我們常常會用到隨機的概念,比如 模擬抽獎活動(如:月度優秀員工抽獎)生成測試數據(如:隨機考勤時間、隨機銷售額)打亂數據順序(如:隨機分配任務到人)Python 的random模塊就像你的 "隨機事件生成器",幫你輕松創建各種隨機數據 一、基礎操作:從隨…

附贈二張圖,闡述我對大模型的生態發展、技術架構認識。

文章精煉&#xff0c;用兩張圖說明大模型發展業態方向&#xff0c;以及大模型主體技術架構。&#xff08;目前還需要進一步驗證我的Thought && ideas&#xff0c;等待機會吧.........&#xff09; 圖一&#xff1a;探究大模型三個層次應用方向&#xff0c;淺層次入門簡…

2025上海車展 | 移遠通信全棧車載智能解決方案重磅亮相,重構“全域智能”出行新范式

2025年4月23日至5月2日&#xff0c;第二十一屆上海國際汽車工業展覽會在國家會展中心&#xff08;上海&#xff09;盛大啟幕。作為車載智能解決方案領域的領軍企業&#xff0c;移遠通信以“全域智能 馭見未來”為主題&#xff0c;攜豐富的車載解決方案及客戶終端驚艷亮相8.2館8…