首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> C# >> 關於C#

構建屬於自己的 MiniORM 框架 (零):ORM 基礎概念與映射模式全景

     編輯:關於C#

在動手寫代碼前,必須建立正確的 ORM 理論認知。本文系統梳理 ORM 產生背景、核心映射模式 (繼承/組合)、對象生命週期、事務處理、映射規則定義方式。

ORM 產生背景

系統中大量業務對象需持久化到關係數據庫。Insert/Update/Delete 操作流程高度相似,僅 SQL 結構隨對象變化。ORM 旨在自動化相同流程,讓開發者專注差異化業務邏輯。

Java 生態 (Hibernate 等) 成熟;.NET 起步較晚,開源框架常因項目特殊性難以直接套用,自研輕量 ORM 更靈活可控。

繼承結構映射三大模式

模式描述優點缺點
ONE_INHERITANCE_TREE_ONE_TABLE (單表)整個繼承樹映射一張表,所有屬性並集為列簡單、查詢快嚴重數據冗余 (子類無屬性列存 NULL)
ONE_INHERITANCE_PATH_ONE_TABLE (多表)每條繼承路徑 (葉子類) 一張表,包含父類屬性無冗余查詢父類需聯表/Union,橫向繼承大時性能差
ONE_CLASS_ONE_TABLE (規範化)每個類一張表,父子表通過 PK 關聯冗余小、符合範式SQL 構造複雜、連接多、效率低

繼承映射示意 OneClassOneTable結構

MiniORM 採用 單表模式 (簡單優先),適合繼承深度淺、屬性差異小的場景。

組合結構映射

對象包含其他對象 (如 Person 包含 Hand、Head),ORM 需支援級聯持久化。關鍵點:外鍵關係、級聯保存/刪除/讀取順序。

對象狀態管理

  1. Transient:新建,無數據,未關聯 DB。
  2. Detached/Dirty:已賦值,未保存,需 Insert。
  3. Persistent/Clean:從 DB 加載,已修改,需 Update。
  4. Deleted:DB 記錄已刪,對象應標記不可用。

ORM 應識別狀態並自動選擇 SQL 操作。

事務處理

  • .NET 兩種方式:System.Transactions.TransactionScope (COM+,優雅但重);SqlTransaction (ADO.NET,輕量,需手動傳遞)。
  • MiniORM 採用 SqlTransaction,參數傳遞實現嵌套控制。

O/R Mapping 規則定義方式

  • Attribute (特性):編譯期類型安全、與代碼共存、Refactoring 友好。MiniORM 採用此方式。
  • 配置文件 (XML/JSON):關注點分離、無侵入、運行時可變更。但易出錯、缺乏智能提示。

本文為系列理論基石,下篇進入反射與 Attribute 實戰應用。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved