将 Entity Framework、LINQ 和 Model-First 用于 Oracle 数据库

 

目的

本教程介绍如何使用 Entity Framework、语言集成查询 (LINQ),以及如何对 Oracle 数据库使用 Model-First 以生成数据定义语言 (DDL) 脚本。

所需时间

大约 30 分钟

概述

Microsoft Entity Framework 抽象关系、逻辑数据库模式,然后向 .NET 应用程序呈现一个概念模式。它为 .NET 开发人员提供对象关系映射。

LINQ 是一种 .NET 数据查询语言,可以查询多种数据源,其中包括通过 LINQ to Entities 查询的实体。

Model-First 使开发人员能够首先创建概念模型。然后由 Visual Studio 创建 Oracle DDL 脚本,从而根据概念模型生成关系数据库模型。

在本教程中,您将了解如何将 Oracle 数据库和这三种技术与 Microsoft Visual Studio Oracle Data Provider for .NET (ODP.NET) 结合使用。首先,您将使用 Entity Data Model Wizard 从现有 Oracle Database 模式创建一个实体数据模型 (EDM)。然后,使用三种不同方法查询此 EDM

1. LINQ 查询

2. 使用 lambda 表达式进行 LINQ 查询,然后调用一个存储过程对结果进行更新。

3. Entity SQL

接下来,您将调用一个通过函数导入功能添加到 EDM 中的存储过程。该存储过程将修改数据库数据并通过一个隐式结果集返回结果。要返回结果集,需要在 .NET 配置文件中提供结果集参数信息。这样,无需使用存储过程即可向数据库中插入数据或者删除数据库中的数据。

最后,将演示如何结合使用 Model-First Oracle 数据库。在 Model-First 模式中,开发人员首先创建一个 Entity Framework 对象关系数据模型。通过该数据模型,开发人员以 DDL 脚本形式自动生成 Oracle 关系数据库模型。

先决条件

开始本教程之前,您应该:

1.

安装 Microsoft Visual Studio 2010 以及 .NET Framework 4 或更高版本。

2.

安装 Oracle Database 10.2 或更高版本,或者安装 Oracle Database XE

3.

OTN 安装 Oracle 11g Oracle Data Access Components (ODAC) 11.2.0.2.30 或更高版本。ODAC 下载包括本教程中将使用的 Oracle Developer Tools for Visual Studio ODP.NET

4.

将这些文件解压缩到工作目录中。

Visual Studio 中创建新项目

1.

要创建一个新的 .NET 控制台应用程序来运行 Entity Framework LINQ 应用程序表单,请打开 Visual Studio。单击File。选择 NewProject

 将 Entity Framework、LINQ 和 Model-First 用于 Oracle 数据库_第1张图片

2.

选择 Visual C#:Windows > Console Application。将项目重命名为 EntityFramework。单击 OK

将 Entity Framework、LINQ 和 Model-First 用于 Oracle 数据库_第2张图片

3.

项目 EntityFramework 打开。

将 Entity Framework、LINQ 和 Model-First 用于 Oracle 数据库_第3张图片

  

创建 Oracle 连接

在创建实体数据模型之前,需要一个使用 ODP.NET Oracle 数据库连接。要创建 Oracle 连接,您应该:

1.

选择 View > Server Explorer

 将 Entity Framework、LINQ 和 Model-First 用于 Oracle 数据库_第4张图片

2.

Server Explorer 窗口中,如果您已经有了一个 HR 模式连接,则将其展开并连接到数据库。例如,下面的屏幕截图将 HR 模式识别为 HR.ORCL。在 User name Password 中输入 HR,然后单击 OK。跳到第 6 步。

 将 Entity Framework、LINQ 和 Model-First 用于 Oracle 数据库_第5张图片

  将 Entity Framework、LINQ 和 Model-First 用于 Oracle 数据库_第6张图片

  

3.

如果您还没有 HR 连接,则在 Server Explorer 中右键单击 Data Connections。选择 Add Connection,然后选择一个包括 HR 模式的 Data source name,例如,ORCL。在 User name Password 中输入 HR。选中 Save password。选择 Default 作为 Role,然后单击 Test Connection

 将 Entity Framework、LINQ 和 Model-First 用于 Oracle 数据库_第7张图片

  

4.

Test connection succeeded 对话框中,单击 OK

 将 Entity Framework、LINQ 和 Model-First 用于 Oracle 数据库_第8张图片

  

5 .

连接创建成功。展开 HR.ORCL

 将 Entity Framework、LINQ 和 Model-First 用于 Oracle 数据库_第9张图片

  

6 .

现在,您要创建在本课程后面将用于执行更新和数据检索的存储过程。要将这些存储过程添加到 HR.ORCL 数据连接中,右键单击 HR.ORCL 并选择 Query Window

 将 Entity Framework、LINQ 和 Model-First 用于 Oracle 数据库_第10张图片

  

7 .

打开工作目录,转到 files.zip 的解压缩位置。找到 INCREASE_SALARY_BY_10  UPDATE_AND_RETURN_SALARY存储过程。将 INCREASE_SALARY_BY_10  UPDATE_AND_RETURN_SALARY 的代码复制到 SQL Query Window中,然后针对每个存储过程单击 Execute Query ()

 将 Entity Framework、LINQ 和 Model-First 用于 Oracle 数据库_第11张图片

 将 Entity Framework、LINQ 和 Model-First 用于 Oracle 数据库_第12张图片

  

8 .

确保新添加的存储过程显示在 HR.ORCL > Procedures 节点下。

 将 Entity Framework、LINQ 和 Model-First 用于 Oracle 数据库_第13张图片

  

使用 Entity Data Model Wizard 创建实体数据模型

现在,您可以基于 HR DEPARTMENTS EMPLOYEES 表以及刚添加的两个新存储过程创建实体数据模型。为此,需要在项目中添加一个 EDM。使用 Entity Data Model Wizard 可以自动生成 EDM

1.

 Solution Explorer 窗口中,右键单击 EntityFramework project 并选择 Add > New Item

 将 Entity Framework、LINQ 和 Model-First 用于 Oracle 数据库_第14张图片

  

2.

 Add New Item 窗口中,选择 ADO.NET Entity Data Model 并将其重命名为 HRModel.edmx,然后单击 Add

 将 Entity Framework、LINQ 和 Model-First 用于 Oracle 数据库_第15张图片

  

3 .

Entity Data Model Wizard 中,选择 Generate from database 并单击 Next

 将 Entity Framework、LINQ 和 Model-First 用于 Oracle 数据库_第16张图片

  

4 .

选择 HR.ORCL 作为数据连接。选择 Yes, include the sensitive data in the connection string,将其命名为HREntities,然后单击 Next

 将 Entity Framework、LINQ 和 Model-First 用于 Oracle 数据库_第17张图片

  

5.

Tables 中选择 DEPARTMENTS  EMPLOYEES,从 Stored Procedures 中选择 INCREASE_SALARY_BY_10 UPDATE_AND_RETURN_SALARY,然后单击 Finish

注: 如果不显示这些存储过程,请确保在本 OBE 前面已将它们添加到 OBE — HR 模式中 Procedures 节点下的 INCREASE_SALARY_BY_10 UPDATE_AND_RETURN_SALARY

 将 Entity Framework、LINQ 和 Model-First 用于 Oracle 数据库_第18张图片

 将 Entity Framework、LINQ 和 Model-First 用于 Oracle 数据库_第19张图片

 将 Entity Framework、LINQ 和 Model-First 用于 Oracle 数据库_第20张图片

  

6.

HRModel EDM 成功创建,如下图所示。

 将 Entity Framework、LINQ 和 Model-First 用于 Oracle 数据库_第21张图片

Entity Framework 数据检索


可以通过多种方式查询 EDM,然后通过 EDM 从数据库中检索数据。本部分将演示三种常见的 EDM 查询方法:LINQ、采用 lambda 表达式的 LINQ 以及 Entity SQL

1. 执行 LINQ 查询


要对 Oracle 数据库执行 LINQ 查询,需要为 ODP.NET Entity Framework 程序集添加一个引用。然后创建代码以执行 LINQ 查询,并将结果返回到控制台窗口。

1.

 Solution Explorer 窗口中,右键单击 References 并选择 Add Reference

将 Entity Framework、LINQ 和 Model-First 用于 Oracle 数据库_第22张图片

  

2.

.NET 选项卡页面中,选择 Oracle.DataAccess  System.Data.Entity  4 版程序集并单击 OK

将 Entity Framework、LINQ 和 Model-First 用于 Oracle 数据库_第23张图片

将 Entity Framework、LINQ 和 Model-First 用于 Oracle 数据库_第24张图片

3.

键入下图中高亮显示的命名空间引用。或者,您也可以复制并粘贴该信息。从您的工作目录中打开包含Programcs.txt 的文件夹。然后,复制包含命名空间引用的代码,并粘贴到 Program.cs 的顶部。

通过这些指令可以访问 ODP.NETADO.NET Entity Framework 命名空间。

将 Entity Framework、LINQ 和 Model-First 用于 Oracle 数据库_第25张图片

  

4.

键入以下 .NET 代码。这些代码对刚创建的 EDM 执行一个 LINQ 查询。然后访问结果并输出到屏幕上。该 LINQ 查询检索所有 EMPLOYEE_ID 值小于 max_id 变量的员工信息。

也可以从 Programcs.txt 中复制 LINQ 查询代码并粘贴到 Program.cs  Main 语句后面。确保用一个右花括号来结束 USING 代码块。

单击 (启动调试)。

将 Entity Framework、LINQ 和 Model-First 用于 Oracle 数据库_第26张图片

  

5.

显示 LINQ 查询的输出,这表示已成功执行对 Oracle 数据库的 LINQ 查询。

将 Entity Framework、LINQ 和 Model-First 用于 Oracle 数据库_第27张图片

  

2. 执行一个使用 lambda 表达式的 LINQ 查询,然后执行 Entity Framework 存储过程映射


LINQ
查询可以包括 lambda 表达式。Lambdas 用作标准查询运算符方法的 LINQ 参数。

通过将 Oracle 存储过程映射到 EDM 中的更新、插入和删除操作,可以对实体执行这些操作。

在本部分中,您将对 EMPLOYEE 实体执行一个使用 lambda 表达式的 LINQ 查询,然后映射一个存储过程以对所有选出的行执行更新操作。您将使用之前导入到 EDM 中的一个存储过程。

1.

首先,创建一个用于更新数据的存储过程。当 .NET 尝试更新数据时,映射的存储过程将对 LINQ 选取的每行执行更新。

 Solution Explorer 窗口中,选择 HRModel.edmx 并单击 Model Browser

将 Entity Framework、LINQ 和 Model-First 用于 Oracle 数据库_第28张图片

2.

HRModel.edmx 中,右键单击 EMPLOYEE 实体并选择 Stored Procedure Mapping

将 Entity Framework、LINQ 和 Model-First 用于 Oracle 数据库_第29张图片

3.

Mapping Details - EMPLOYEE 窗口中,选择 <Select Update Function>,然后选择 INCREASE_SALARY_BY_10 存储过程。

将 Entity Framework、LINQ 和 Model-First 用于 Oracle 数据库_第30张图片

4.

必须在实体和 Oracle 数据库之间建立参数数据类型映射。从下拉列表中选择 EMPLOYEE_ID 作为 ID,选择 SALARY 作为 SAL

将 Entity Framework、LINQ 和 Model-First 用于 Oracle 数据库_第31张图片

将 Entity Framework、LINQ 和 Model-First 用于 Oracle 数据库_第32张图片

5.

键入下图中高亮显示的代码,或在 Programcs.txt 中复制以 LINQ using lambda expressions -- 开头的代码块,然后粘贴到 Program.cs 中已有代码语句的后面。单击 (启动调试)

在应用程序中,您将注意到 result.SALARY 设置为 result.SALARY。实际上,Entity Framework 执行的存储过程将工资增加了 10。在下一部分中,您将对这些行执行查询,以证明工资的确增加了 10

注:在查看了第一个结果集之后,按 Enter 键继续。

将 Entity Framework、LINQ 和 Model-First 用于 Oracle 数据库_第33张图片

  

6.

LINQ 检索这两行数据,并通过执行上述存储过程更新这两行数据。文本显示工资已经更新。

将 Entity Framework、LINQ 和 Model-First 用于 Oracle 数据库_第34张图片

3. 执行 Entity SQL 查询


在本部分中,将查询与前一部分相同的行,来证明存储过程已成功更新这些行。您将使用 Entity Framework 中的另一种查询方法 Entity SQL 进行查询。

1.

键入下图中高亮显示的代码,或在 Programcs.txt 中复制以 Entity SQL -- 开头的代码块,然后粘贴到 Program.cs 中已有代码语句的后面。单击 (启动调试),查看工资增加 10 的更新结果。

注:查看输出之后,按两下 Enter 继续。

将 Entity Framework、LINQ 和 Model-First 用于 Oracle 数据库_第35张图片

将 Entity Framework、LINQ 和 Model-First 用于 Oracle 数据库_第36张图片

  

函数导入和隐式结果集检索 | 直接插入和更新数据

通过 Entity Framework,开放人员能够定义自己的 .NET 方法来执行数据库存储过程。具体做法是在概念模型中创建函数导入,并将其映射到存储过程。在本部分中,您将定义自己的方法并映射到 Oracle 存储过程,用以执行更新。该存储过程还将使用一个隐式结果集返回修改后的数据。开发人员在 .NET 配置文件中定义结果集元数据,以便 Entity Framework 正确检索数据。

本部分介绍如何在 Entity Framework 中以编程方式修改 Oracle 数据库数据。您将对 DEPARTMENTS 表执行插入和删除操作。

1.

您将使用 Visual Studio 的函数导入工具将存储过程映射到用户定义的 .NET 方法。由于存储过程返回一个隐式结果集,因此在使用该工具之前,需要在 .NET 配置文件中定义结果集元数据。

Solution Explorer 窗口中,打开 App.Config 文件。

将 Entity Framework、LINQ 和 Model-First 用于 Oracle 数据库_第37张图片

  

2.

打开工作目录,转到 files.zip 的解压缩位置,找到 AppConfig.txt 文件,然后打开。复制 <oracle.dataaccess.client>代码段,然后将其粘贴到 App.Config 文件的 </connectionStrings> 标记下面。现在,您已经定义了用于检索存储过程结果集的元数据。

将 Entity Framework、LINQ 和 Model-First 用于 Oracle 数据库_第38张图片

  

3.

接下来,将使用函数导入工具把一个 .NET 方法映射到 Oracle 存储过程。右键单击 HRModel.edmx 并选择 Model Browser

将 Entity Framework、LINQ 和 Model-First 用于 Oracle 数据库_第39张图片

4.

Model Browser 中,依次展开 HRModel.Store  Stored Procedures 节点。选择UPDATE_AND_RETURN_SALARY 存储过程。您已经在创建 EDM 时导入了该存储过程。

将 Entity Framework、LINQ 和 Model-First 用于 Oracle 数据库_第40张图片

5.

右键单击 UPDATE_AND_RETURN_SALARY 并选择 Add Function Import

将 Entity Framework、LINQ 和 Model-First 用于 Oracle 数据库_第41张图片

6.

 Add Function Import 窗口中,选择 Returns a Collection Of 部分中的 Complex。存储过程所返回的结果集中仅包含两列,而不是完整定义的实体或标量值。

单击 Get Column Information。将从 .NET 配置文件中检索列信息。

要调用 .NET 中的方法,需要使用默认的 UPDATE_AND_RETURN_SALARY 函数导入名称。

将 Entity Framework、LINQ 和 Model-First 用于 Oracle 数据库_第42张图片

7.

 Stored Procedure Column Information 部分单击 Create New Complex Type,然后单击 OK

将 Entity Framework、LINQ 和 Model-First 用于 Oracle 数据库_第43张图片

8.

 Model Browser 中,您将看到 UPDATE_AND_RETURN_SALARY,它位于 HRModel.edmx > HRModel > EntityContainer:HREntities > Function Imports 下面。

将 Entity Framework、LINQ 和 Model-First 用于 Oracle 数据库_第44张图片

9.

 Solution Explorer 窗口中,打开 Program.cs 文件。将 Programcs.txt 中以 Update salary using a stored procedure function import 开头的代码段键入或复制到已有代码语句的后面,如下图所示。您会看到,现在实体上下文中已经定义了一个 UPDATE_AND_RETURN_SALARY 方法。该方法将调用映射的存储过程并返回隐式结果集。

单击 (启动调试)。

注:查看结果集之后,按三下 Enter 继续。

将 Entity Framework、LINQ 和 Model-First 用于 Oracle 数据库_第45张图片

10.

.NET 方法返回员工姓名和更新后的工资。

将 Entity Framework、LINQ 和 Model-First 用于 Oracle 数据库_第46张图片

使用 LINQ 插入和删除新的部门

1.

将插入或删除新部门的代码键入或复制到 Program.cs 文件中。您可以从 Programcs.txt 文件复制代码,然后将其粘贴到 Program.cs 文件中已有代码语句的后面。

程序注释描述了每个代码段的作用。

单击 (启动调试)。

注:查看结果集之后,按 4 Enter 继续。

将 Entity Framework、LINQ 和 Model-First 用于 Oracle 数据库_第47张图片

控制台将显示是否成功添加或删除了部门。

 将 Entity Framework、LINQ 和 Model-First 用于 Oracle 数据库_第48张图片

  

Model-First

在本部分中,您将为 EMPLOYEE 实体添加一个新属性。为了在 Oracle 数据库模式中以列的形式反映这个新属性,Visual Studio 将从新的 EDM 生成 Oracle DDL 脚本。这些脚本将在 Oracle 数据库上运行,以更新关系模型。

1.

HRModel.edmx 中,选择 EMPLOYEE 实体。要在 EMPLOYEE 实体中创建新属性,请右键单击该实体并选择 Add >Scalar Property。将属性命名为 ADDRESS

将 Entity Framework、LINQ 和 Model-First 用于 Oracle 数据库_第49张图片

 将 Entity Framework、LINQ 和 Model-First 用于 Oracle 数据库_第50张图片

 将 Entity Framework、LINQ 和 Model-First 用于 Oracle 数据库_第51张图片

2.

要生成 DDL 脚本,请打开 HRModel  Properties 窗口。将 Database Schema Name 更改为 HR,并选择SSDLtoOracle.tt 作为 DDL Generation Template。确保在 Database Generation Workflow property 中选择了Generate Oracle via T4(TPT).xaml,从而确保生成"每种类型一个表" DDL

这些选项确保创建的 Oracle DDL 适合 HR 模式,每种类型代表一个单独的数据库表。

将 Entity Framework、LINQ 和 Model-First 用于 Oracle 数据库_第52张图片

3.

右键单击 HRModel.edmx 并选择 Generate Database from Model

将 Entity Framework、LINQ 和 Model-First 用于 Oracle 数据库_第53张图片

4.

选择 Generate Database from Model 之后,将弹出 Custom Workflow Security Warning 窗口,这是因为 Oracle 定义了一个自定义工作流。单击 OK

将 Entity Framework、LINQ 和 Model-First 用于 Oracle 数据库_第54张图片

5.

Generate Database Wizard 生成 DDL 脚本,供 Oracle 数据库执行。可以将这些脚本保存到一个文件中,以便稍后运行,例如,可以通过作为 Oracle Developer Tools for Visual Studio 一部分内置的 SQL*Plus 执行引擎来运行这些脚本。

请注意,该脚本创建和删除数据库对象。默认情况下,执行删除的脚本被注释掉了。如果您要使用它们,请确保在执行前取消注释。

将 Entity Framework、LINQ 和 Model-First 用于 Oracle 数据库_第55张图片

 

你可能感兴趣的:(framework)