所有 LINQ to SQL 操作入口為 DataContext,需提供資料庫連線與對映資訊。對映來源為 MappingSource,.NET 3.5 提供兩種實作:
AttributeMappingSource:類別屬性標註([Table]、[Column]、[Association])XmlMappingSource:外部 XML 檔案定義對映關係static DataContext CreateContext() {
var path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "northwnd.xml");
var connStr = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "northwnd.mdf");
var mapping = XmlMappingSource.FromXml(File.ReadAllText(path));
return new DataContext(connStr, mapping);
}
或使用強型別 NorthwndDataContext(由工具產生),直接存取 context.Customers 屬性。
強烈建議使用工具自動產生,手寫易遺漏關聯維護代碼(如 EntitySet 委托註冊),影響級聯操作。
# 1. 本地 MDF 檔案
sqlmetal "northwnd.mdf" /code:northwnd.cs /map:northwnd.xml /namespace:LinqAttach /context:Northwnd /pluralize
# 2. 連線字串
sqlmetal /conn:"server=myserver;database=northwind" /code:northwnd.cs /map:northwnd.xml /namespace:LinqAttach /context:Northwnd /pluralize
# 3. 伺服器/資料庫/密碼
sqlmetal /server:myserver /database:northwnd /password:pwd /code:northwnd.cs /map:northwnd.xml /namespace:LinqAttach /context:Northwnd /pluralize
參數說明:
/code:產生實體類別與 DataContext 衍生類別的 .cs 檔/map:產生 XML 對映檔/namespace:指定命名空間/context:DataContext 衍生類別名稱/pluralize:依英文單複數規則命名實體與屬性(如 Customer → Customers)常見迷思:「大專案用 XML、小專案用 Attribute」純屬誤導。XML 優勢在於資料庫異動時無需重新編譯,僅替換 XML 檔即可;其餘多為團隊習慣差異。本系列採用 XML 方式示範。
SQL Server 允許無主鍵資料表,但 LINQ to SQL 實體類別至少需一個 IsPrimaryKey=true 的 Column,作為身分識別快取與物件生命週期管理的唯一鍵值。