- 实体框架教程
- 实体框架 - 首页
- 实体框架 - 概述
- 实体框架 - 架构
- 实体框架 - 环境设置
- 实体框架 - 数据库设置
- 实体框架 - 数据模型
- 实体框架 - 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
我们建议您逐步执行上述示例,以便更好地理解。