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

LINQ to SQL 全景解析:從核心概念到對象模型建立的三種路徑

     編輯:關於.NET

釐清概念:LINQ ≠ LINQ to SQL

項目LINQ (Language Integrated Query)LINQ to SQL
定位語言層面的統一查詢語法.NET 3.5 組件,針對 SQL Server 的輕量級 ORM
資料源任意實作 IEnumerable<T> 的來源 (XML、集合、DataSet、資料庫...)僅限 SQL Server
核心優勢編譯時期型別檢查、IntelliSense、統一語法物件關聯映射、變更追蹤、延遲載入

ORM 核心價值:解決阻抗失衡

關係型資料庫 (集合導向、結構化) 與 物件導向語言 (圖狀導向、封裝行為) 之間的不匹配,ORM 透過映射層自動轉換。

C# 3.0 為 LINQ 鋪路的關鍵特性

  1. 隱含型別區域變數:var q = from...
  2. 擴充方法:Where、Select 等標準查詢運算子
  3. 物件/集合初始化器:new Customer { Name = "Tom" }
  4. 匿名型別:select new { c.Name, c.Age }
  5. Lambda 運算式:c => c.Age > 18
  6. 運算式樹:Expression<Func<T,bool>> 讓查詢可序列化為 SQL
  7. 查詢運算式:from c in ctx.Customers select c (語法糖)

對象模型建立三種路徑深度比較

1. O/R 設計工具 (Visual Studio 整合)

  • 拖曳資料表產生 .dbml + .designer.cs
  • 映射資訊以 Attribute 標註 於類別/屬性上 ([Table], [Column])
  • 缺點:侵入式映射,修改映射需重新編譯

2. SQLMetal 命令列工具

sqlmetal /conn:"server=.;db=Northwind" /dbml:Northwind.dbml /namespace:MyApp /serialization:Unidirectional
  • 產生 .dbml + 外部映射檔 .map (XML 格式)
  • 映射與程式碼分離,支援 IntelliSense (需 LinqToSqlMapping.xsd)
  • 適合大型資料庫、團隊協作、CI/CD 流程

3. 手工撰寫 (搭配 CodeSmith/MyGeneration)

  • 完全掌控映射細節,適合特殊命名慣例或舊系統整合
  • 映射檔需通過 LinqToSqlMapping.xsd 驗證
  • 避免設計工具產生的冗餘代碼

外部映射檔 (.map) 結構範例

<Database Name="Northwind">
  <Table Name="dbo.Customers" Member="Customer">
    <Column Name="CustomerID" Member="ID" Storage="_ID" DbType="NChar(5) NOT NULL" IsPrimaryKey="true" />
    <Column Name="CompanyName" Member="CompanyName" Storage="_CompanyName" DbType="NVarChar(40) NOT NULL" />
    <Association Name="FK_Orders_Customers" Member="Orders" Storage="_Orders" ThisKey="CustomerID" OtherKey="CustomerID" />
  </Table>
</Database>

學習資源推薦

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