提問者方案
- 前端 (高併發、業務變動大):ASP.NET MVC + ADO.NET + 存儲過程。理由:SP 效能高、業務邏輯下沉資料庫、減少併發衝突。
- 後端 (維護為主、業務複雜):ASP.NET MVC + ORM (ServiceStack.OrmLite) + 少量 SP。理由:增刪改查開發快、程式碼少、複雜查詢用 SP。
專家評析
存儲過程優缺點
- ✅ 執行計畫快取、減少網路傳輸、資料庫端優化空間大。
- ✅ 業務邏輯集中資料庫,修改無需重新部署應用。
- ❌ **除錯困難** (無斷點、變數監視弱)、版本控管差 (SQL 檔案難追蹤)。
- ❌ **資料庫綁定嚴重**,遷移成本極高 (Oracle→SQL Server 需重寫)。
- ❌ **併發控制非銀彈**:SP 內仍需正確鎖順序、隔離等級,寫錯照樣死鎖。
ORM (Entity Framework / Dapper / OrmLite) 優缺點
- ✅ 程式碼即文檔、強型別、重構友善、單元測試容易。
- ✅ 遷移腳本版本化、跨資料庫支援 (EF Core)。
- ⚠️ 複雜查詢可能產生低效 SQL,**需懂 SQL 調優**、必要時落地原生 SQL。
- ⚠️ 反射/表達式樹開銷,極高併發熱點可考慮 Dapper (微型 ORM) 或手寫 ADO.NET。
建議架構
- 統一採用 ORM (EF Core / Dapper) 為主,存儲過程**僅用於**:
— 大量資料搬移/報表 (Set-based 操作)
— 極度複雜、經調優固化的核心邏輯
— 跨系統資料庫級整合
- 前後端同架構:同一專案/類庫共用資料存取層,避免雙重維護。
- 讀寫分離**:CQRS 模式,查詢用 Dapper/投影,寫入用 EF Core 領域模型。
- 效能基準測試**:實測 QPS、延遲,數據驅動決策,而非主觀假設。
結論:現代 .NET 開發**以 ORM 為主、SP 為輔**,重開發效率、可維護性、可測試性;效能熱點再局部優化。