- 實體框架教程
- 實體框架 - 首頁
- 實體框架 - 概述
- 實體框架 - 架構
- 實體框架 - 環境設定
- 實體框架 - 資料庫設定
- 實體框架 - 資料模型
- 實體框架 - DbContext
- 實體框架 - 資料型別
- 實體框架 - 關係
- 實體框架 - 生命週期
- 實體框架 - 程式碼優先方法
- 實體框架 - 模型優先方法
- 實體框架 - 資料庫優先方法
- 實體框架 - 開發方法
- 實體框架 - 資料庫操作
- 實體框架 - 併發
- 實體框架 - 事務
- 實體框架 - 檢視
- 實體框架 - 索引
- 實體框架 - 儲存過程
- 實體框架 - 離線實體
- 實體框架 - 表值函式
- 實體框架 - 原生SQL
- 實體框架 - 列舉支援
- 實體框架 - 非同步查詢
- 實體框架 - 持久化
- 實體框架 - 投影查詢
- 實體框架 - 命令日誌
- 實體框架 - 命令攔截
- 實體框架 - 空間資料型別
- 實體框架 - 繼承
- 實體框架 - 遷移
- 實體框架 - 急切載入
- 實體框架 - 延遲載入
- 實體框架 - 顯式載入
- 實體框架 - 驗證
- 實體框架 - 跟蹤更改
- 實體框架 - 彩色實體 (Colored Entities - 此翻譯可能需要根據上下文調整)
- 實體框架 - 程式碼優先方法
- 實體框架 - 第一個示例
- 實體框架 - 資料註解
- 實體框架 - Fluent API
- 實體框架 - 種子資料庫
- 實體框架 - 程式碼優先遷移
- 實體框架 - 多個DbContext
- 實體框架 - 巢狀實體型別
- 實體框架資源
- 實體框架 - 快速指南
- 實體框架 - 有用資源
- 實體框架 - 討論
實體框架 - 儲存過程
實體框架允許您在實體資料模型中使用儲存過程,而不是或與它的自動命令生成結合使用。
您可以使用儲存過程對資料庫表執行預定義的邏輯,許多組織都有強制使用這些儲存過程的策略。
它還可以指定 EF 應該使用您的儲存過程來插入、更新或刪除實體。
雖然動態生成的命令安全、高效,並且通常與您自己編寫的命令一樣好或更好,但在許多情況下,儲存過程已經存在,並且貴公司的實踐可能會限制直接使用表。
或者,您可能只想對儲存中執行的操作進行顯式控制,並更傾向於建立儲存過程。
以下示例從“檔案”→“新建”→“專案”建立新專案。
步驟 1 - 從中間窗格中選擇“控制檯應用程式”,並在名稱欄位中輸入 StoredProceduresDemo。
步驟 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 - 在伺服器資源管理器中,再次右鍵單擊您的資料庫。
步驟 7 - 選擇“新建查詢”,並在 T-SQL 編輯器中輸入以下程式碼以在資料庫中新增一個儲存過程,該過程將返回學生的成績。
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[GetStudentGrades]') AND type in (N'P', N'PC')) BEGIN EXEC dbo.sp_executesql @statement = N' CREATE PROCEDURE [dbo].[GetStudentGrades] @StudentID int AS SELECT EnrollmentID, Grade, CourseID, StudentID FROM dbo.StudentGrade WHERE StudentID = @StudentID ' END GO
步驟 8 - 右鍵單擊編輯器並選擇“執行”。
步驟 9 - 右鍵單擊您的資料庫並單擊“重新整理”。您將看到在資料庫中建立了一個儲存過程。
步驟 10 - 在解決方案資源管理器中右鍵單擊專案名稱,然後選擇“新增”→“新建項”。
步驟 11 - 然後在“模板”窗格中選擇“ADO.NET 實體資料模型”。
步驟 12 - 輸入 SPModel 作為名稱,然後單擊“新增”。
步驟 13 - 在“選擇模型內容”對話方塊中,選擇“從資料庫中選擇 EF 設計器”,然後單擊“下一步”。
步驟 14 - 選擇您的資料庫並單擊“下一步”。
步驟 15 - 在“選擇資料庫物件”對話方塊中,單擊表、檢視。
步驟 16 - 選擇位於“儲存過程和函式”節點下的 GetStudentGradesForCourse 函式,然後單擊“完成”。
步驟 17 - 選擇“檢視”→“其他視窗”→“實體資料模型瀏覽器”,右鍵單擊“函式匯入”下的 GetStudentGrades 並選擇“編輯”。
它將生成以下對話方塊。
步驟 18 - 單擊“實體”單選按鈕,從組合框中選擇 StudentGrade 作為此儲存過程的返回型別,然後單擊“確定”。
讓我們看一下下面的 C# 程式碼,其中所有成績都將透過在 GetStudentGrades 儲存過程中傳遞學生 ID 作為引數來檢索。
class Program {
static void Main(string[] args) {
using (var context = new UniContextEntities()) {
int studentID = 22;
var studentGrades = context.GetStudentGrades(studentID);
foreach (var student in studentGrades) {
Console.WriteLine("Course ID: {0}, Title: {1}, Grade: {2} ",
student.CourseID, student.Course.Title, student.Grade);
}
Console.ReadKey();
}
}
}
編譯並執行上述程式碼後,您將收到以下輸出:
Course ID: 4022, Title: Microeconomics, Grade: 3.00 Course ID: 4041, Title: Macroeconomics, Grade: 3.50
我們建議您逐步執行上述示例,以便更好地理解。