.NET Entity Framework (with Oracle ODP.NET) -Code First

来源:https://www.cnblogs.com/sammy621/archive/2018/08/07/9361802.html
-Advertisement-
Play Games

上一篇文章介紹了.NET Entity Framework ,並演示了Model First模式,本文將繼續討論 Code First 模式的實現。 ...


上一篇文章介紹了.NET Entity Framework ,並演示了Model First模式,本文將繼續討論 Code First 模式的實現。 

一、摘要

1、目標

本文驗證了通過Oracle Data Provider for .NET (ODP.NET)使用Entity Framework (EF) Code First。先創建.NET類,通過框架在資料庫中創建這些類對應的表;修改這些類,並通過Code First 將這些類的變化移植和映射到對應表中。

2、前言

Entity Framework 抽象關係型資料庫的邏輯架構並映射到.NET應用中,為開發者提供了對象關係映射能力。Code First 讓開發者開發的類轉化為資料庫的實體表。Code First Migrations 讓類的變化精準地映射到資料庫的對應表。

自從Oracle Data Access Components (ODAC) 12c Release 3 (12.1.0.2.1)這個版本開始,ODP.NET支持Code First 和 Code First Migrations 了,ODP.NET提供EF模型(Model)的資料庫存、取及更新能力。

本文將建立EF程式,生成"Employee" 和"Department" 類,並添加這些類的對象數據。程式運行時,會將類映射到資料庫表,並將對象存儲為表記錄行。然後為類添加新的屬性,而這些屬性會通過Code First Migrations添加到表的列信息。

3、環境條件

開始前,你應該滿足以下條件:

  • Visual Studio 2013 以上,.Net Framework 4.5以上
  • Oracle 11g Release 2以上
  • 這些文件下載到你的工作目錄(下載的文件為Programecs.txt)
  • 請先閱讀“通過NuGet 安裝配置ODP.NET”,本文將告訴你如何安裝和配置 Entity Framework 6 以及 ODP.NET,並通過一個控制台程式來驗證相關使用。
  • 如果你並不瞭解ODT是什麼,本條可略。Oracle Developer Tools(ODT)可以集成到Visual Studio環境中輔助Oracle開發,但這對Code First並不是必須的。本文能過 Server Explorer 瀏覽Oracle資料庫對象變化以驗證Code First 對資料庫的改變。如果你想用ODT的話請去Oracle官網上下載。

本文還將以Oracle 中自帶的"HR"為例,但註意數據表對象的命名要避免衝突。

二、Code First

本部分將建兩個類 "Employee" 、 "Department" ,並存儲相關數據。當程式運行時,EF Code First會創建這兩個類的對應表,併在生成類實例數據並保存時,會生成一個表的數據記錄。

1、打開上一往篇文章中建立的項目(點此進入),打開app.config。在<connectionStrings> 配置節下修改用戶名和密碼,以連接HR資料庫。註意鏈接的名字:OracleDbContext,我們會在後面的程式中用到這個名字

 2、從下載的文件中copy出代碼片段,粘到項目的Program.cs中。這段代碼需要ODP.NET 和 EF 的相關配置,這些配置在前一篇文章中已配置好了。仔細閱讀代碼會發現,資料庫操作類OracleDbContext 名字與第1步所提到的 <connectionStrings> 配置節中的名字相同。程式使用 連接串信息連接資料庫,然後創建 Employee 和 Department 的實例,並生成數據。

如下圖,看下這兩個類在程式中如何定義的。每個類都包含有可被讀取和保存的欄位。其中一個欄位(Location)被註釋了,後續會去掉這個欄位的註釋。

如果你不想使用HR架構,你可以在代碼" modelBuilder.HasDefaultSchema("HR"); " 中,將HR替換成你想用的架構。

 3、運行程式,將在資料庫中創建 "Employees" 和 "Departments" 表,並各添加一條數據。註意,這些表名是大小寫敏感的。

 4、檢查一下資料庫中,這些表各數據是否正常添加。運行完程式後,在Server Explorer 中點開 HR.ORCL鏈接。此步操作需要安裝配置 ODT (Oracle Developer Tools for Visual Studio)

 請輸入正確的密碼

展開表,檢查在類中定義的兩個表是否被創建

右鍵DepartmentsEmployees ,查詢表數據,驗證數據與程式中插入的一致性。

三、Code First Migration

類會隨著業務需求和資料庫架構的變化而改變類定義,本部分會改變Employee類來模擬這種變化 。只需少量代碼,就能使類的變化同步到資料庫表。

在第二部分代碼中,第三個表_MigrationHistory同時被創建。這個表會跟蹤Code First 類的變化。

本步將演示在Employee類中添加欄位 Location ,並將它同步到資料庫表中。

1、依次打開 View > Other Windows > Package Manager Console. 這個視窗的功能是用來輸入Code First 的遷移命令,以同步.NET類和資料庫結構。

2、在視窗里輸入 Enable-Migrations 。這個命令是允許開啟 Code First Migrations 功能。

3、在Program.cs 中去掉註釋,模擬在Employee類中添加欄位的情形。

4、在PMC視窗輸入 Add-Migration First ,框架將會為數據模型Model 的變化 生成遷移代碼。

5、在視窗中鍵入 Update-Database ,變化將同步到資料庫

6、再看下資料庫表的變化 。在Server Explorer打開 Employees表

驗證下Location欄位是否被添加

四、總結

本文要點如下:

  • 使用ODP.NET 創建 Code First 應用,將類及數據存儲到資料庫表中
  • 使用 Code First Migrations 更新資料庫結構

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1. 學習計劃 1、訂單系統實現 2、訂單生成 3、Mycat資料庫分片 2. 訂單系統 2.1. 功能分析 1、在購物車頁面點擊“去結算”按鈕,跳轉到訂單確認頁面 a) 必須要求用戶登錄 b) 使用攔截器實現。 c) 如果用戶未登錄跳轉到登錄頁面。 d) 如果用戶已經登錄,放行。展示確認頁面。 e ...
  • (一)iterable對象和Iterator對象的區別 iterable對象(可迭代的對象):可以使用for迴圈,例如:字元串、列表 、字典 、集合等 Iterator對象(迭代器):除了可以用for迴圈外,還可以用next()不斷獲取下一個元素. __iter__() 和__next__()這2個 ...
  • 加QQ群:838197940免費領取! 【Python參考書籍】 入門讀物 1.《Python基礎教程》(Beginning Python From Novice to Professional) 2.《Python學習手冊》(Learning Python) 3.《Python編程》(Progra ...
  • 歷屆試題 核桃的數量 時間限制:1.0s 記憶體限制:256.0MB 時間限制:1.0s 記憶體限制:256.0MB 問題描述 小張是軟體項目經理,他帶領3個開發組。工期緊,今天都在加班呢。為鼓舞士氣,小張打算給每個組發一袋核桃(據傳言能補腦)。他的要求是: 1. 各組的核桃數量必須相同 2. 各組內必 ...
  • 上代碼,有問題歡迎留言指出。 執行完上述代碼後,會在代碼同目錄下創建一個保存職位信息的txt文件,jobDetails.txt。 這隻是獲取一頁招聘信息的代碼,後續會添加,如何獲取url和所有頁的招聘信息的代碼。 智聯招聘網站還是有一點點小坑的,就是不是所有的招聘職位詳情頁面都是使用智聯的官網格式, ...
  • 本文目錄 1. 摘要 2. Window下運行 3.linux下運行 4. 開發記錄 5. 總結 1.概要 寫《Asp.Net Core 2.0 項目實戰》系列斷斷續續已經很長時間了,期間很多朋友要求開放源碼,但是項目代碼一直有很多問題,就算勉強開源出來大家看起來也比較費勁,運行起來也看不到實際的效 ...
  • 今天是2018年8月8日,已經和騰訊解除勞動關係,我的公司正式開始運營,雖然還有很多事情需要理清,公司官網也沒有做,接下來什麼事情都需要自己去完成了,需要一步一個腳印去完善,開啟一個新的征途,我將在博客和公眾號更新我的動態。 昨天是星期二,我在騰訊這家優秀的公司工作的第4180天,這天我離開了騰訊。 ...
  • AspNetCore+Swagger 生成Model 描述 前言: 本篇文章實現是基於上一篇文章,進下補充:多餘的就不多說了,只是為了實現Model的描述生成:有興趣的可以結合上一篇的進行實現:如有更好的辦法希望可以告知謝謝大家! 上一篇文章地址: https://www.cnblogs.com/s ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...