.NET Framework 3.5 同時引入了 LINQ to SQL (DBML) 與 Entity Framework (EDMX) 兩種 ORM 設計器。雖然視覺上極度相似,但在命名慣例、映射彈性、模型結構等核心層面存在關鍵差異。本文以 Northwind 資料庫為例,為您詳細拆解兩者的異同點。
| 特性 | LINQ to SQL (Association) | Entity Framework (Association) |
|---|---|---|
| 視覺化屬性頁 | 單一對話框設定父/子、鍵、刪除規則 | 分為 Principal/Dependent 兩端,獨立設定 Multiplicity、OnDelete |
| 外鍵屬性 | 預設在子實體產生 FK 屬性 (可關閉) | 預設不產生 FK 屬性,純導覽屬性;可勾選 "Add foreign key properties" |
| 刪除規則 | Cascade/None | Cascade/None/SetNull (對應資料庫 FK 行為) |
Employees → 實體類 Employee (單數)Employees (複數)Employees → 實體類 Employees (複數)Employees (同名)context.Employees 既是集合也是型別名稱在 EDM 設計器中將 Entity Type 重命名為單數 Employee,實體集保持 Employees。重命名後:
EmployeeObjectQuery<Employee> Employees| 維度 | LINQ to SQL | Entity Framework |
|---|---|---|
| 映射方式 | 屬性標註 (Attribute-based) | 外部 XML (CSDL/SSDL/MSL),EDMX 封裝 |
| 資料庫支援 | 僅 SQL Server | 多資料庫 (Provider Model) |
| 模型複雜度 | 1:1 資料表映射為主 | 支援繼承、複雜型別、多表實體、條件映射 |
| 查詢語言 | LINQ to SQL | LINQ to Entities + ESQL |
| 物件服務 | DataContext (輕量) | ObjectContext (完整追蹤、併發、交易) |
雖然設計器外觀相似,但 EF 的 EDMX 架構提供了遠超 DBML 的彈性與擴展性。命名慣例的差異是開發者遷移時最容易踩的坑,務必在 EDM 中手動將 Entity Type 改為單數形式,這將為後續開發節省大量困惑時間。理解兩者架構根本差異,才能根據專案需求做出正確的技術選型。