LINQ 與Oracle應用 :轉帖

將 Entity Framework、LINQ 和 Model-First 用於 Oracle 數據庫

目的

本教程介紹如何使用 Entity Framework、語言集成查詢 (LINQ),以及如何對 Oracle 數據庫使用 Model-First 以生成數據定義語言 (DDL) 腳本。數據庫

所需時間

大約 30 分鐘express

概述

Microsoft Entity Framework 抽象關係、邏輯數據庫模式,而後向 .NET 應用程序呈現一個概念模式。它爲 .NET 開發人員提供對象關係映射。編程

LINQ 是一種 .NET 數據查詢語言,能夠查詢多種數據源,其中包括經過 LINQ to Entities 查詢的實體。瀏覽器

Model-First 使開發人員可以首先建立概念模型。而後由 Visual Studio 建立 Oracle DDL 腳本,從而根據概念模型生成關係數據庫模型。oracle

在本教程中,您將瞭解如何將 Oracle 數據庫和這三種技術與 Microsoft Visual Studio 和 Oracle Data Provider for .NET (ODP.NET) 結合使用。首先,您將使用 Entity Data Model Wizard 從現有 Oracle Database 模式建立一個實體數據模型 (EDM)。而後,使用三種不一樣方法查詢此 EDM:app

1. LINQ 查詢ide

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。選擇 New> Project

 該步驟的屏幕截圖

 

2.

選擇 Visual C#:Windows > Console Application。將項目重命名爲 EntityFramework。單擊 OK

該步驟的屏幕截圖

 

3.

項目 EntityFramework 打開。

顯示該步驟的屏幕截圖

 

建立 Oracle 鏈接

在建立實體數據模型以前,須要一個使用 ODP.NET 的 Oracle 數據庫鏈接。要建立 Oracle 鏈接,您應該:

1.

選擇 View > Server Explorer

 顯示該步驟的屏幕截圖

 

2.

在 Server Explorer 窗口中,若是您已經有了一個 HR 模式鏈接,則將其展開並鏈接到數據庫。例如,下面的屏幕截圖將 HR 模式識別爲 HR.ORCL。在 User name 和 Password 中輸入 HR,而後單擊 OK。跳到第 6 步。

 該步驟的屏幕截圖        

  該步驟的屏幕截圖

 

3.

若是您尚未 HR 鏈接,則在 Server Explorer 中右鍵單擊 Data Connections。選擇 Add Connection,而後選擇一個包括 HR 模式的 Data source name,例如,ORCL。在 User name 和 Password 中輸入 HR。選中 Save password。選擇 Default 做爲 Role,而後單擊 Test Connection

 該步驟的屏幕截圖

 

4.

在 Test connection succeeded 對話框中,單擊 OK

 該步驟的屏幕截圖

 

5          .

鏈接建立成功。展開 HR.ORCL

 該步驟的屏幕截圖

 

6          .

如今,您要建立在本課程後面將用於執行更新和數據檢索的存儲過程。要將這些存儲過程添加到 HR.ORCL 數據鏈接中,右鍵單擊 HR.ORCL 並選擇 Query Window

 該步驟的屏幕截圖

 

7          .

打開工做目錄,轉到 files.zip 的解壓縮位置。找到 INCREASE_SALARY_BY_10UPDATE_AND_RETURN_SALARY 存儲過程。將 INCREASE_SALARY_BY_10UPDATE_AND_RETURN_SALARY 的代碼複製到 SQL Query Window 中,而後針對每一個存儲過程單擊 Execute Query ()。

 該步驟的屏幕截圖

 該步驟的屏幕截圖

 

8          .

確保新添加的存儲過程顯示在 HR.ORCL > Procedures 節點下。

 該步驟的屏幕截圖

 

使用 Entity Data Model Wizard 建立實體數據模型

如今,您能夠基於 HR 的 DEPARTMENTS 和 EMPLOYEES 表以及剛添加的兩個新存儲過程建立實體數據模型。爲此,須要在項目中添加一個 EDM。使用 Entity Data Model Wizard 能夠自動生成 EDM。

1.

Solution Explorer 窗口中,右鍵單擊 EntityFramework project 並選擇 Add > New Item

 該步驟的屏幕截圖

 

2.

Add New Item 窗口中,選擇 ADO.NET Entity Data Model 並將其重命名爲 HRModel.edmx,而後單擊 Add

 該步驟的屏幕截圖

 

3          .

在 Entity Data Model Wizard 中,選擇 Generate from database 並單擊 Next

 該步驟的屏幕截圖

 

4          .

選擇 HR.ORCL 做爲數據鏈接。選擇 Yes, include the sensitive data in the connection string,將其命名爲 HREntities,而後單擊 Next

 顯示該步驟的屏幕截圖

 

5.

從 Tables 中選擇 DEPARTMENTSEMPLOYEES,從 Stored Procedures 中選擇 INCREASE_SALARY_BY_10UPDATE_AND_RETURN_SALARY,而後單擊 Finish

注: 若是不顯示這些存儲過程,請確保在本 OBE 前面已將它們添加到 OBE 中 — HR 模式中 Procedures 節點下的 INCREASE_SALARY_BY_10 和 UPDATE_AND_RETURN_SALARY。

 該步驟的屏幕截圖

 該步驟的屏幕截圖

 該步驟的屏幕截圖

 

6.

HRModel EDM 成功建立,以下圖所示。

 該步驟的屏幕截圖

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

該步驟的屏幕截圖

 

2.

在 .NET 選項卡頁面中,選擇 Oracle.DataAccessSystem.Data.Entity 第 4 版程序集並單擊 OK

該步驟的屏幕截圖

該步驟的屏幕截圖

 

3.

鍵入下圖中高亮顯示的命名空間引用。或者,您也能夠複製並粘貼該信息。從您的工做目錄中打開包含 Programcs.txt 的文件夾。而後,複製包含命名空間引用的代碼,並粘貼到 Program.cs 的頂部。         

       經過這些指令能夠訪問 ODP.NET、ADO.NET 和 Entity Framework 命名空間。                  

該步驟的屏幕截圖

 

4.

鍵入如下 .NET 代碼。這些代碼對剛建立的 EDM 執行一個 LINQ 查詢。而後訪問結果並輸出到屏幕上。該 LINQ 查詢檢索全部 EMPLOYEE_ID 值小於 max_id 變量的員工信息。

也能夠從 Programcs.txt 中複製 LINQ 查詢代碼並粘貼到 Program.cs 的 Main 語句後面。確保用一個右花括號來結束 USING 代碼塊。        

   單擊 (啓動調試)。

該步驟的屏幕截圖

 

5.

顯示 LINQ 查詢的輸出,這表示已成功執行對 Oracle 數據庫的 LINQ 查詢。

顯示該步驟的屏幕截圖

 

2. 執行一個使用 lambda 表達式的 LINQ 查詢,而後執行 Entity Framework 存儲過程映射

LINQ 查詢能夠包括 lambda 表達式。Lambdas 用做標準查詢運算符方法的 LINQ 參數。  

經過將 Oracle 存儲過程映射到 EDM 中的更新、插入和刪除操做,能夠對實體執行這些操做。

在本部分中,您將對 EMPLOYEE 實體執行一個使用 lambda 表達式的 LINQ 查詢,而後映射一個存儲過程以對全部選出的行執行更新操做。您將使用以前導入到 EDM 中的一個存儲過程。   

1.

首先,建立一個用於更新數據的存儲過程。當 .NET 嘗試更新數據時,映射的存儲過程將對 LINQ 選取的每行執行更新。         

Solution Explorer 窗口中,選擇 HRModel.edmx 並單擊 Model Browser

顯示該步驟的屏幕截圖

2.

在 HRModel.edmx 中,右鍵單擊 EMPLOYEE 實體並選擇 Stored Procedure Mapping

顯示該步驟的屏幕截圖

 

3.

在 Mapping Details - EMPLOYEE 窗口中,選擇 <Select Update Function>,而後選擇 INCREASE_SALARY_BY_10 存儲過程。

顯示該步驟的屏幕截圖

 

4.

必須在實體和 Oracle 數據庫之間創建參數數據類型映射。從下拉列表中選擇 EMPLOYEE_ID 做爲 ID,選擇 SALARY 做爲 SAL

顯示該步驟的屏幕截圖

顯示該步驟的屏幕截圖

 

5.

鍵入下圖中高亮顯示的代碼,或在 Programcs.txt 中複製以 LINQ using lambda expressions -- 開頭的代碼塊,而後粘貼到 Program.cs 中已有代碼語句的後面。單擊 (啓動調試)

在應用程序中,您將注意到 result.SALARY 設置爲 result.SALARY。實際上,Entity Framework 執行的存儲過程將工資增長了 10。在下一部分中,您將對這些行執行查詢,以證實工資的確增長了 10。

注:在查看了第一個結果集以後,按 Enter 鍵繼續。

顯示該步驟的屏幕截圖

 

6.

LINQ 檢索這兩行數據,並經過執行上述存儲過程更新這兩行數據。文本顯示工資已經更新。

顯示該步驟的屏幕截圖

 

3. 執行 Entity SQL 查詢

在本部分中,將查詢與前一部分相同的行,來證實存儲過程已成功更新這些行。您將使用 Entity Framework 中的另外一種查詢方法 Entity SQL 進行查詢。  

1.

鍵入下圖中高亮顯示的代碼,或在 Programcs.txt 中複製以 Entity SQL -- 開頭的代碼塊,而後粘貼到 Program.cs 中已有代碼語句的後面。單擊 (啓動調試),查看工資增長 10 的更新結果。

注:查看輸出以後,按兩下 Enter 繼續。

顯示該步驟的屏幕截圖

顯示該步驟的屏幕截圖

        

函數導入和隱式結果集檢索 | 直接插入和更新數據

經過 Entity Framework,開放人員可以定義本身的 .NET 方法來執行數據庫存儲過程。具體作法是在概念模型中建立函數導入,並將其映射到存儲過程。在本部分中,您將定義本身的方法並映射到 Oracle 存儲過程,用以執行更新。該存儲過程還將使用一個隱式結果集返回修改後的數據。開發人員在 .NET 配置文件中定義結果集元數據,以便 Entity Framework 正確檢索數據。 

本部分介紹如何在 Entity Framework 中以編程方式修改 Oracle 數據庫數據。您將對 DEPARTMENTS 表執行插入和刪除操做。

1.

您將使用 Visual Studio 的函數導入工具將存儲過程映射到用戶定義的 .NET 方法。因爲存儲過程返回一個隱式結果集,所以在使用該工具以前,須要在 .NET 配置文件中定義結果集元數據。         

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

顯示該步驟的屏幕截圖

 

2.

打開工做目錄,轉到 files.zip 的解壓縮位置,找到 AppConfig.txt 文件,而後打開。複製 <oracle.dataaccess.client> 代碼段,而後將其粘貼到 App.Config 文件的 </connectionStrings> 標記下面。如今,您已經定義了用於檢索存儲過程結果集的元數據。

顯示該步驟的屏幕截圖

 

3.

接下來,將使用函數導入工具把一個 .NET 方法映射到 Oracle 存儲過程。右鍵單擊 HRModel.edmx 並選擇 Model Browser

顯示該步驟的屏幕截圖

 

4.

在 Model Browser 中,依次展開 HRModel.StoreStored Procedures 節點。選擇 UPDATE_AND_RETURN_SALARY 存儲過程。您已經在建立 EDM 時導入了該存儲過程。

顯示該步驟的屏幕截圖

 

5.

右鍵單擊 UPDATE_AND_RETURN_SALARY 並選擇 Add Function Import。         

顯示該步驟的屏幕截圖

 

6.

Add Function Import 窗口中,選擇 Returns a Collection Of 部分中的 Complex。存儲過程所返回的結果集中僅包含兩列,而不是完整定義的實體或標量值。        

單擊 Get Column Information。將從 .NET 配置文件中檢索列信息。        

要調用 .NET 中的方法,須要使用默認的 UPDATE_AND_RETURN_SALARY 函數導入名稱。        

顯示該步驟的屏幕截圖

7.

Stored Procedure Column Information 部分單擊 Create New Complex Type,而後單擊 OK

顯示該步驟的屏幕截圖

 

8.

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

顯示該步驟的屏幕截圖

 

9.

Solution Explorer 窗口中,打開 Program.cs 文件。將 Programcs.txt 中以 Update salary using a stored procedure function import 開頭的代碼段鍵入或複製到已有代碼語句的後面,以下圖所示。您會看到,如今實體上下文中已經定義了一個 UPDATE_AND_RETURN_SALARY 方法。該方法將調用映射的存儲過程並返回隱式結果集。        

單擊 (啓動調試)。

注:查看結果集以後,按三下 Enter 繼續。

顯示該步驟的屏幕截圖

10.

.NET 方法返回員工姓名和更新後的工資。

顯示該步驟的屏幕截圖

 

使用 LINQ 插入和刪除新的部門

1.

將插入或刪除新部門的代碼鍵入或複製到 Program.cs 文件中。您能夠從 Programcs.txt 文件複製代碼,而後將其粘貼到 Program.cs 文件中已有代碼語句的後面。          

程序註釋描述了每一個代碼段的做用。         

單擊 (啓動調試)。

 

注:查看結果集以後,按 4 下 Enter 繼續。

顯示該步驟的屏幕截圖

控制檯將顯示是否成功添加或刪除了部門。

 顯示該步驟的屏幕截圖

         

Model-First

在本部分中,您將爲 EMPLOYEE 實體添加一個新屬性。爲了在 Oracle 數據庫模式中以列的形式反映這個新屬性,Visual Studio 將重新的 EDM 生成 Oracle DDL 腳本。這些腳本將在 Oracle 數據庫上運行,以更新關係模型。

1.

在 HRModel.edmx 中,選擇 EMPLOYEE 實體。要在 EMPLOYEE 實體中建立新屬性,請右鍵單擊該實體並選擇 Add > Scalar Property。將屬性命名爲 ADDRESS

顯示該步驟的屏幕截圖

 顯示該步驟的屏幕截圖

 顯示該步驟的屏幕截圖        

2.

要生成 DDL 腳本,請打開 HRModelProperties 窗口。將 Database Schema Name 更改成 HR,並選擇 SSDLtoOracle.tt 做爲 DDL Generation Template。確保在 Database Generation Workflow property 中選擇了 Generate Oracle via T4(TPT).xaml,從而確保生成「每種類型一個表」的 DDL。

這些選項確保建立的 Oracle DDL 適合 HR 模式,每種類型表明一個單獨的數據庫表。         

顯示該步驟的屏幕截圖

 

3.

右鍵單擊 HRModel.edmx 並選擇 Generate Database from Model

顯示該步驟的屏幕截圖

 

4.

選擇 Generate Database from Model 以後,將彈出 Custom Workflow Security Warning 窗口,這是由於 Oracle 定義了一個自定義工做流。單擊 OK

顯示該步驟的屏幕截圖

 

5.

Generate Database Wizard 生成 DDL 腳本,供 Oracle 數據庫執行。能夠將這些腳本保存到一個文件中,以便稍後運行,例如,能夠經過做爲 Oracle Developer Tools for Visual Studio 一部份內置的 SQL*Plus 執行引擎來運行這些腳本。          

請注意,該腳本建立和刪除數據庫對象。默認狀況下,執行刪除的腳本被註釋掉了。若是您要使用它們,請確保在執行前取消註釋。        

顯示該步驟的屏幕截圖

總結

在本教程中,您學習瞭如何:

  • 在 Visual Studio 中建立新項目。
  • 建立 Oracle 鏈接。
  • 使用 Entity Data Model Wizard 建立實體數據模型。
  • 執行查詢,以檢索 Entity Framework 數據。
  • 將存儲過程映射到 EDM。
  • 使用 Entity Framework 函數導入建立用戶定義的方法並映射到存儲過程。
  • 以編程形式修改 Entity Framework 數據。
  • 使用 Model-First 生成 Oracle DDL 腳本。

 

  • 課程設計人員:Anupama Mandya
  • 其餘人員:Alex Keh

硬件和軟件,集成設計、卓越性能         關於 Oracle |Oracle 和 Sun | Oracle RSS 信源        | 招聘 | 聯繫咱們 | 網站地圖 | 法律聲明 | 使用條款 | 您的隱私權利        
相關文章
相關標籤/搜索