- 實體框架教程
- 實體框架 - 首頁
- 實體框架 - 概述
- 實體框架 - 架構
- 實體框架 - 環境設定
- 實體框架 - 資料庫設定
- 實體框架 - 資料模型
- 實體框架 - 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
我們建議您逐步執行上述示例,以便更好地理解。