Entity Framework 5.0.0 Function Import 以及 Implicit REF CURSOR Binding

源代码

概要:1,明如何使用Entity Framework中的function import功能。

2,说明如何使用ODP.NET的隐式REF CURSOR绑定(implicit REF CURSOR binding)。

环境以及工具:

Windows 10 企业版

Microsoft Visual Studio Enterprise 2015

Oracle Database 11g Enterprise Edition Release 11.2.0.1.0

.NET Framework 4.0

ODP.NET(Nuget Package Id: Oracle.ManagedDataAccess; Nuget Package Version: 12.1.2400)

Entity Framework(Nuget Package Id: EntityFramework; Nuget Package Version: 5.0.0)

其他要求:Oracle数据库中的HR schema访问权限。

1,创建一个Winform项目名称为FunctionImportTest,.NET版本是4.0。

2, 打开Nuget Package Manager控制台。

  依次执行如下两个命令分别安装EF和ODP.NET的包:

  install-package -id EntityFramework -version 5.0.0 -projectname FunctionImportTest

  install-package -id Oracle.ManagedDataAccess -projectname FunctionImportTest

3,在Oracle数据库中的HR方案里面创建一个存储过程。

  此存储过程有一个类型为隐式游标变量的出参。

 1 CREATE OR REPLACE PROCEDURE "HR"."PROC_GET_EMP_BY_DEPT_NAME"
 2 (
 3     DEPT_NAME IN VARCHAR2 DEFAULT NULL,
 4     CUR_EMPS  OUT SYS_REFCURSOR
 5 ) AS
 6     SQL_STMT VARCHAR2(256) := ‘SELECT t1.first_name, t1.last_name, t2.department_name FROM employees t1 ‘ ||
 7                               ‘JOIN departments t2 ON t1.department_id = t2.department_id ‘;
 8 BEGIN
 9     IF DEPT_NAME IS NOT NULL THEN
10         SQL_STMT := SQL_STMT || ‘WHERE t2.department_name = ‘ || ‘‘‘‘ || DEPT_NAME || ‘‘‘‘;
11     END IF;
12
13     OPEN CUR_EMPS FOR SQL_STMT;
14 END "PROC_GET_EMP_BY_DEPT_NAME";

4,从数据库生成概念模型

(1),在项目名称上点击右键,选择Add-->Add Item。选择ADO.NET Entity Data Model,并把Name设置为HRModel,然后点击Add。

 

(2),选择从数据库生成模型,点击NEXT。

(3),选择数据库连接。本文使用Oracle数据库中的HR方案。

(4),选择Entity Framework版本。

(5),选择数据库对象及设置。选择上文已经创建的HR.PROC_GET_EMP_BY_DEPT_NAME存储过程,并点击FINISH。

5,此时已经导入了Oracle中的存储过程。然后把存储过程的出参CUR_EMPS映射为具体的类。

导入之后的样子如下图所示:

6,配置app.config文件,设置存储过程的隐式游标参数的元数据信息。

以下是app.config文件中oracle.manageddataaccess.client部分的配置。在设置属性值时,VS基本都有提示。

 1 <oracle.manageddataaccess.client>
 2         <version number="*">
 3             <dataSources>
 4                 <dataSource alias="SampleDataSource" descriptor="(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=ORCL))) " />
 5             </dataSources>
 6             <implicitRefCursor>
 7                 <!--
 8                     注意:方案名称和存储过程的名称是大小写敏感的。
 9                     如果要保留方案名称和存储过程名称中的小写字母,则添加&quot;。
10                     例如<storedProcedure schema="&quot;SchemaName&quot;" name="&quot;StoredProcedureName&quot;">
11                     否则,EF框架会默认把这些名称转换为大写形式。
12                 -->
13                 <storedProcedure schema="HR" name="PROC_GET_EMP_BY_DEPT_NAME">
14                     <!-- 游标参数的名称是大小写敏感的。 -->
15                     <refCursor name="CUR_EMPS">
16                         <bindInfo mode="Output"/>
17                         <!-- 参数的序数从0开始 -->
18                         <metadata columnName="FIRST_NAME" columnOrdinal="0" columnSize="20" nativeDataType="Varchar2" providerType="Varchar2" providerDBType="String" dataType="System.String" />
19                         <metadata columnName="LAST_NAME" columnOrdinal="1" columnSize="25" nativeDataType="Varchar2" providerType="Varchar2" providerDBType="String" dataType="System.String" />
20                         <metadata columnName="DEPARTMENT_NAME" columnOrdinal="2" columnSize="30" nativeDataType="Varchar2" providerType="Varchar2" providerDBType="String" dataType="System.String" />
21                     </refCursor>
22                 </storedProcedure>
23             </implicitRefCursor>
24         </version>
25     </oracle.manageddataaccess.client>

7,把函数导入映射为类型。

(1),修改function import。切换到Model Browser窗口。在Function Imports下面刚才导入的存储过程名称上点击右键,然后点击Edit。

(2),修改function import,并生成Complext Type。

① 修改Function Import Name。

② 选择Returns a Collection Of下面的Complex。

③ 点击Get Column Information。

④ 点击Create New Complex Type。

⑤ 把Complex Type的名称修改为EmployeeBasicInfo。

⑥ 点击OK。

此时,Complex Types下面多了一个类型。

8,调用GetEmpByDeptName方法获取数据,然后和DataGridView控件绑定,把数据显示出来。

时间: 2024-10-12 00:45:21

Entity Framework 5.0.0 Function Import 以及 Implicit REF CURSOR Binding的相关文章

ASP.NET Core 1.0、ASP.NET MVC Core 1.0和Entity Framework Core 1.0

ASP.NET 5.0 将改名为 ASP.NET Core 1.0 ASP.NET MVC 6  将改名为 ASP.NET MVC Core 1.0 Entity Framework 7.0    将改名为 Entity Framework Core 1.0 .NET新的跨平台版本将命名为.NET Core 1.0 新版本的ASP.NET和Entity Framework有一个严重的问题,就是它们同以前的版本不兼容.这不只是行为或API稍有差异的事,而基本上是进行了完全的重写,去掉了大量的功能.

ASP.Net Core项目在Mac上使用Entity Framework Core 2.0进行迁移可能会遇到的一个问题.

在ASP.Net Core 2.0的项目里, 我使用Entity Framework Core 2.0 作为ORM. 有人习惯把数据库的连接字符串写在appSettings.json里面, 有的习惯写死在程序里, 有的习惯把它放在launchSettings.json里面(只放在这里的话迁移命令就找不到连接字符串了吧). 我习惯把连接字符串写成系统的环境变量. 我这个项目数据库的连接字符串的变量名是 “MLH:SalesApi:DefaultConnection”, 在windows 10上,

[转帖]2016年时的新闻:ASP.NET Core 1.0、ASP.NET MVC Core 1.0和Entity Framework Core 1.0

http://www.cnblogs.com/webapi/p/5673104.html ASP.NET 5.0 将改名为 ASP.NET Core 1.0 ASP.NET MVC 6  将改名为 ASP.NET MVC Core 1.0 Entity Framework 7.0    将改名为 Entity Framework Core 1.0 .NET新的跨平台版本将命名为.NET Core 1.0 新版本的ASP.NET和Entity Framework有一个严重的问题,就是它们同以前的版

Entity Framework Core 2.0 入门简介

不多说废话了, 直接切入正题. EF Core支持情况 EF Core的数据库Providers: 此外还即将支持CosmosDB和 Oracle. EFCore 2.0新的东西: 查询: EF.Functions.Like() Linq解释器的改进 全局过滤(按类型) 编译查询(Explicitly compiled query) GroupJoin的SQL优化. 映射: Type Configuration 配置 Owned Entities (替代EF6的复杂类型) Scalar UDF映

Entity Framework Core 2.0 新特性

本文翻译来自:https://docs.microsoft.com/en-us/ef/core/what-is-new/index 一.模型级查询过滤器(Model-level query filters) ef core2.0包含了一个新特性,我们叫他模型级查询过滤器(Model-level query filters).此特性允许使用Linq查询表达式直接定义在实体类型的元数据模型上.这样的过滤器会自动应用到任何LINQ查询所涉及的那些实体类型,包括间接引用的实体类型(对象引用,导航属性).

Professional C# 6 and .NET Core 1.0 - 38 Entity Framework Core

本文内容为转载,重新排版以供学习研究.如有侵权,请联系作者删除. 转载请注明本文出处:Professional C# 6 and .NET Core 1.0 - 38 Entity Framework Core ----------------------------------------------------------------------- What's In This Chapter? Introducing Entity Framework Core 1.0 Using Depe

ASP.NET Core 开发-Entity Framework (EF) Core 1.0 Database First

ASP.NET Core 开发-Entity Framework Core 1.0 Database First,ASP.NET Core 1.0 EF Core操作数据库. Entity Framework Core 1.0 也已经发布了,可以适用于 .NET Core 1.0 及ASP.NET Core 1.0 . EF Core RC2 时,使用的Code First: http://www.cnblogs.com/linezero/p/EntityFrameworkCore.html E

Linux + Mono 目前已经支持Entity Framework 6.1

在上个随笔 CentOS上 Mono3.2.8运行ASP.NET MVC4经验中,步骤2中要求卸载EF 5.0,这样才能在Linux + Mono的环境中运行ASP.NET MVC4的Web应用.今天,没有卸载EF 5.0的情况下,使用NuGet新安装了EF 6.1.0,如下图(使用VS012英文版), 图1: 新安装了Entity Framework 6.1.0,同时EF5.0没有卸载,可在图片中看到两个EF共存 图1中的这个网站是一个接近完成的完整网站,在其它各项配置都与 CentOS上 M

Entity Framework 的枚举类型

新增数据模型,新增“实体”之后,新增“枚举类型”,创建Enum值,将“实体”中的列和Enum关联,选中“实体”中的列属性改变类型为Enum名称,生成数据库…… 如下转自:http://item.congci.com/item/entity-framework-meiju-leixing-enum 第一步:先创建一个实体对象,在VS 2012里面实体对象还可以修改实体颜色 第二步:对象已经有了,接着创建一个Type,Type为Enum,内部与外部(Internal and External),在空