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

C# 3.0 入門系列(三):初體驗 LINQ to SQL 與 SqlMetal 代碼生成

     編輯:關於C語言

從資料庫到物件:LINQ to SQL 的核心價值

在前幾節中,我們已經準備好資料庫,並初步了解了資料表之間的關聯關係。現在,我們要解決一個核心問題:資料與物件之間該如何對應?傳統上,資料庫中的關聯式資料與物件導向的類別之間存在著所謂的「阻抗失配」。LINQ to SQL(舊稱 DLINQ)的誕生,正是為了橋接這道鴻溝,讓資料與物件能夠建立一一對應的映射關係。

這種映射關係是雙向的:我們可以根據現有資料庫生成映射代碼,也可以根據映射代碼生成資料庫。簡單說,資料庫結構與映射類別實現了相互轉化。LINQ Preview 為我們提供了一個強大的命令列工具 sqlmetal,專門用於從資料庫自動生成實體類別代碼。

SqlMetal 工具實戰

sqlmetal.exe 通常位於以下目錄之一:

  • C:\Program Files\Microsoft SDKs\Windows\v6.0A\bin
  • C:\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;
}

幾個關鍵點:

  • partial 關鍵字:C# 2.0 引入,允許類別定義分散在多個檔案中,方便我們在另一個 partial 類別中擴展功能而不影響自動生成的代碼。
  • 繼承 DataContext:這是 LINQ to SQL 的核心,只有繼承 DataContext 才能獲得資料庫連線、查詢轉譯、變更追蹤等完整支援。
  • Table<T> 屬性:每個資料表對應一個泛型 Table<T> 屬性,泛型參數為對應的實體類別,提供強型別的查詢入口。

有了這個 DataContext 衍生類別,我們就能以強型別、IntelliSense 友善的方式操作資料庫,告別字串拼接 SQL 的時代。

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