星空网 > 软件开发 > ASP.net

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 THEN10     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。

Entity Framework 5.0.0 Function Import 以及 Implicit REF CURSOR Binding 

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

Entity Framework 5.0.0 Function Import 以及 Implicit REF CURSOR Binding

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

Entity Framework 5.0.0 Function Import 以及 Implicit REF CURSOR Binding

(4),选择Entity Framework版本。

Entity Framework 5.0.0 Function Import 以及 Implicit REF CURSOR Binding

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

Entity Framework 5.0.0 Function Import 以及 Implicit REF CURSOR Binding

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

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

Entity Framework 5.0.0 Function Import 以及 Implicit REF CURSOR Binding

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。

Entity Framework 5.0.0 Function Import 以及 Implicit REF CURSOR Binding

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

① 修改Function Import Name。

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

③ 点击Get Column Information。

④ 点击Create New Complex Type。

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

⑥ 点击OK。

Entity Framework 5.0.0 Function Import 以及 Implicit REF CURSOR Binding

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

Entity Framework 5.0.0 Function Import 以及 Implicit REF CURSOR Binding

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

 

Entity Framework 5.0.0 Function Import 以及 Implicit REF CURSOR Binding

 

 




原标题:Entity Framework 5.0.0 Function Import 以及 Implicit REF CURSOR Binding

关键词:

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

举报差评:https://www.goluckyvip.com/tag/2767.html
跟卖狗:https://www.goluckyvip.com/tag/2768.html
韩国客户:https://www.goluckyvip.com/tag/2769.html
CPC案例:https://www.goluckyvip.com/tag/277.html
美国CNBC网站:https://www.goluckyvip.com/tag/2770.html
对华加征关税:https://www.goluckyvip.com/tag/2771.html
洛阳市涧西区有啥好玩的地方 洛阳涧西区附近景点:https://www.vstour.cn/a/408256.html
九月初新疆旅游服装搭配(新疆游玩必备衣服清单):https://www.vstour.cn/a/408257.html
相关文章
我的浏览记录
最新相关资讯
海外公司注册 | 跨境电商服务平台 | 深圳旅行社 | 东南亚物流