
- 實體框架教程
- 實體框架 - 首頁
- 實體框架 - 概述
- 實體框架 - 架構
- 實體框架 - 環境設定
- 實體框架 - 資料庫設定
- 實體框架 - 資料模型
- 實體框架 - DbContext
- 實體框架 - 型別
- 實體框架 - 關係
- 實體框架 - 生命週期
- 實體框架 - 程式碼優先方法
- 實體框架 - 模型優先方法
- 實體框架 - 資料庫優先方法
- 實體框架 - 開發方法
- 實體框架 - 資料庫操作
- 實體框架 - 併發
- 實體框架 - 事務
- 實體框架 - 檢視
- 實體框架 - 索引
- 實體框架 - 儲存過程
- 實體框架 - 離線實體
- 實體框架 - 表值函式
- 實體框架 - 原生SQL
- 實體框架 - 列舉支援
- 實體框架 - 非同步查詢
- 實體框架 - 持久化
- 實體框架 - 投影查詢
- 實體框架 - 命令日誌
- 實體框架 - 命令攔截
- 實體框架 - 空間資料型別
- 實體框架 - 繼承
- 實體框架 - 遷移
- 實體框架 - 渴望載入
- 實體框架 - 延遲載入
- 實體框架 - 顯式載入
- 實體框架 - 驗證
- 實體框架 - 跟蹤更改
- 實體框架 - 彩色實體
- 實體框架 - 程式碼優先方法
- 實體框架 - 第一個示例
- 實體框架 - 資料註釋
- 實體框架 - Fluent API
- 實體框架 - 種子資料庫
- 實體框架 - 程式碼優先遷移
- 實體框架 - 多個DbContext
- 實體框架 - 巢狀實體型別
- 實體框架資源
- 實體框架 - 快速指南
- 實體框架 - 有用資源
- 實體框架 - 討論
實體框架 - 表值函式
在本章中,我們將學習如何使用實體框架設計器對映表值函式 (TVF),以及如何從 LINQ 查詢呼叫 TVF。
TVF 目前僅在資料庫優先工作流中受支援。
它首次在實體框架版本 5 中引入。
要使用 TVF,您必須面向 .NET Framework 4.5 或更高版本。
它與儲存過程非常相似,但有一個關鍵區別,即 TVF 的結果是可組合的。這意味著 TVF 的結果可以在 LINQ 查詢中使用,而儲存過程的結果則不能。
讓我們來看一下從“檔案”→“新建”→“專案”建立新專案的示例。

步驟 1 - 從中間窗格中選擇“控制檯應用程式”,並在名稱欄位中輸入 TableValuedFunctionDemo。
步驟 2 - 在伺服器資源管理器中,右鍵單擊您的資料庫。

步驟 3 - 選擇“新建查詢”,並在 T-SQL 編輯器中輸入以下程式碼以在您的資料庫中新增新表。
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[StudentGrade]') AND type in (N'U')) BEGIN CREATE TABLE [dbo].[StudentGrade]( [EnrollmentID] [int] IDENTITY(1,1) NOT NULL, [CourseID] [int] NOT NULL, [StudentID] [int] NOT NULL, [Grade] [decimal](3, 2) NULL, CONSTRAINT [PK_StudentGrade] PRIMARY KEY CLUSTERED ([EnrollmentID] ASC) WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY] ) ON [PRIMARY] END GO
步驟 4 - 右鍵單擊編輯器並選擇“執行”。

步驟 5 - 右鍵單擊您的資料庫並單擊“重新整理”。您將在資料庫中看到新新增的表。

步驟 6 - 現在建立一個函式,該函式將返回課程的學生成績。在 T-SQL 編輯器中輸入以下程式碼。
CREATE FUNCTION [dbo].[GetStudentGradesForCourse] (@CourseID INT) RETURNS TABLE RETURN SELECT [EnrollmentID], [CourseID], [StudentID], [Grade] FROM [dbo].[StudentGrade] WHERE CourseID = @CourseID
步驟 7 - 右鍵單擊編輯器並選擇“執行”。

現在您可以看到該函式已建立。

步驟 8 - 右鍵單擊解決方案資源管理器中的專案名稱,然後選擇“新增”→“新建項”。
步驟 9 - 然後在“模板”窗格中選擇“ADO.NET 實體資料模型”。

步驟 10 - 輸入 TVFModel 作為名稱,然後單擊“新增”。
步驟 11 - 在“選擇模型內容”對話方塊中,選擇“從資料庫中選擇 EF 設計器”,然後單擊“下一步”。

步驟 12 - 選擇您的資料庫並單擊“下一步”。

步驟 13 - 在“選擇資料庫物件”對話方塊中,選擇表、檢視。

步驟 14 - 選擇位於“儲存過程和函式”節點下的 GetStudentGradesForCourse 函式,然後單擊“完成”。
步驟 15 - 選擇“檢視”→“其他視窗”→“實體資料模型瀏覽器”,右鍵單擊“函式匯入”下的 GetStudentGradesForCourse,然後選擇“編輯”。

您將看到以下對話方塊。

步驟 16 - 單擊“實體”單選按鈕,從組合框中選擇 Enrollment 作為此函式的返回型別,然後單擊“確定”。
讓我們來看一下下面的 C# 程式碼,其中將檢索所有註冊課程 ID = 4022 的學生的成績。
class Program { static void Main(string[] args) { using (var context = new UniContextEntities()) { var CourseID = 4022; // Return all the best students in the Microeconomics class. var students = context.GetStudentGradesForCourse(CourseID); foreach (var result in students) { Console.WriteLine("Student ID: {0}, Grade: {1}", result.StudentID, result.Grade); } Console.ReadKey(); } } }
編譯並執行上述程式碼後,您將收到以下輸出:
Student ID: 1, Grade: 2 Student ID: 4, Grade: 4 Student ID: 9, Grade: 3.5
我們建議您逐步執行上述示例,以便更好地理解。