在前幾節中,我們已經準備好資料庫,並初步了解了資料表之間的關聯關係。現在,我們要解決一個核心問題:資料與物件之間該如何對應?傳統上,資料庫中的關聯式資料與物件導向的類別之間存在著所謂的「阻抗失配」。LINQ to SQL(舊稱 DLINQ)的誕生,正是為了橋接這道鴻溝,讓資料與物件能夠建立一一對應的映射關係。
這種映射關係是雙向的:我們可以根據現有資料庫生成映射代碼,也可以根據映射代碼生成資料庫。簡單說,資料庫結構與映射類別實現了相互轉化。LINQ Preview 為我們提供了一個強大的命令列工具 sqlmetal,專門用於從資料庫自動生成實體類別代碼。
sqlmetal.exe 通常位於以下目錄之一:
C:\Program Files\Microsoft SDKs\Windows\v6.0A\binC:\Windows\Microsoft.Net\Framework\v3.5打開命令提示字元視窗,直接執行 sqlmetal 即可查看參數說明。針對 Northwind 範例資料庫,我們可以執行如下命令生成 C# 映射文件:
sqlmetal /server:myserver /database:northwind /namespace:nwind /code:nwind.cs /language:csharp
參數含義一目瞭然:指定伺服器、資料庫、命名空間、輸出檔案名稱與程式語言。執行成功後,你會在 LINQ Preview 的 bin 目錄下發現生成的 nwind.cs 檔案。
由於 nwind.cs 是自動生成的,建議在初學階段不要手動修改。後續進階教程中我會詳細剖析其中的代碼含義,以及如何實現繼承關係。這裡先帶大家看看核心的 Northwind 類別定義:
public partial class Northwind : DataContext {
// ...
public Table<Order> Orders;
public Table<Product> Products;
public Table<OrderDetail> OrderDetails;
}
幾個關鍵點:
DataContext 才能獲得資料庫連線、查詢轉譯、變更追蹤等完整支援。Table<T> 屬性,泛型參數為對應的實體類別,提供強型別的查詢入口。有了這個 DataContext 衍生類別,我們就能以強型別、IntelliSense 友善的方式操作資料庫,告別字串拼接 SQL 的時代。