探討 LINQ to SQL 對資料庫視圖的支援與單表繼承映射機制,含 O/R 設計師操作與生成 SQL 分析。
將視圖從「伺服器總管」拖曳至 O/R 設計師,自動生成實體類別。查詢語法與資料表完全相同。
var q = from i in db.Invoices
where i.ShipCity == "London"
select new { i.OrderID, i.ProductName, i.Quantity, i.CustomerName };
生成 SQL:
SELECT [t0].[OrderID], [t0].[ProductName], [t0].[Quantity], [t0].[CustomerName]
FROM [dbo].[Invoices] AS [t0]
WHERE [t0].[ShipCity] = @p0
var q = from qo in db.Quarterly_Orders select qo;
生成 SQL:
SELECT [t0].[CustomerID], [t0].[CompanyName], [t0].[City], [t0].[Country]
FROM [dbo].[Quarterly Orders] AS [t0]
注意:O/R 設計師僅支援 1:1 映射。複雜映射(一實體對多表)不支援,但可將實體映射至聯接多表的視圖繞過限制。
整個繼承階層儲存於單一資料表,包含所有可能欄位的平坦聯集。不適用之欄位為 NULL。須在根類別標註 [InheritanceMapping] 屬性,或由 O/R 設計師自動生成映射程式碼。
單表策略查詢效能佳,適合較淺的繼承階層。