- 实体框架教程
- 实体框架 - 主页
- 实体框架 - 概述
- 实体框架 - 架构
- 实体 F - 环境设置
- 实体框架 - 数据库设置
- 实体框架 - 数据模型
- 实体框架-DbContext
- 实体框架 - 类型
- 实体框架 - 关系
- 实体框架 - 生命周期
- 实体 F - 代码优先方法
- 实体 F - 模型优先方法
- 实体 F - 数据库优先方法
- 实体框架 - DEV 方法
- 实体F——数据库操作
- 实体框架 - 并发
- 实体框架 - 事务
- 实体框架 - 视图
- 实体框架 - 索引
- 实体 F - 存储过程
- 实体 F - 断开连接的实体
- 实体 F - 表值函数
- 实体框架 - 本机 SQL
- 实体框架 - 枚举支持
- 实体F - 异步查询
- 实体框架 - 持久性
- 实体 F - 投影查询
- 实体 F - 命令记录
- 实体F——命令拦截
- 实体框架 - 空间数据类型
- 实体框架 - 继承
- 实体框架 - 迁移
- 实体框架 - 预加载
- 实体框架 - 延迟加载
- 实体框架 - 显式加载
- 实体框架 - 验证
- 实体框架 - 跟踪更改
- 实体框架 - 彩色实体
- 实体 F - 代码优先方法
- 实体框架 - 第一个示例
- 实体框架 - 数据注释
- 实体框架 - 流畅的 API
- 实体框架-种子数据库
- 实体 F - 代码优先迁移
- 实体 F - 多个 DbContext
- 实体 F - 嵌套实体类型
- 实体框架资源
- 实体框架 - 快速指南
- 实体框架 - 有用的资源
- 实体框架 - 讨论
实体框架 - 表值函数
在本章中,我们将学习如何使用实体框架设计器映射表值函数 (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 - 单击“实体”单选按钮,然后从组合框中选择“注册”作为该函数的返回类型,然后单击“确定”。
让我们看一下下面的 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
我们建议您逐步执行上述示例,以便更好地理解。