Entity Framework With Oracle

来源:http://www.cnblogs.com/liubingbing/archive/2017/01/16/6290137.html
-Advertisement-
Play Games

參考頁面: http://www.yuanjiaocheng.net/Entity/first.html http://www.yuanjiaocheng.net/Entity/jieshao.html http://www.yuanjiaocheng.net/entity/tixijiegou.h ...


參考頁面:

http://www.yuanjiaocheng.net/Entity/first.html

http://www.yuanjiaocheng.net/Entity/jieshao.html

http://www.yuanjiaocheng.net/entity/tixijiegou.html

http://www.yuanjiaocheng.net/entity/setenvrionment.html

http://www.yuanjiaocheng.net/entity/createdatamodel.html

雖然EF6都快要出來了,但是對於Oracle資料庫,仍然只能用DB first和Model First來編程,不能用Code First真是一個很大的遺憾啊。

好了,廢話少說,我們來看看EF中是如何用DB first和Model First來對Oracle編程的。

首先我們要下載ODP.NET這個數據驅動程式,下載鏈接:http://www.oracle.com/technetwork/topics/dotnet/index-085163.html

安裝成功後,我們在VS連接Oracle資料庫時就可以選擇ODP.NET了,如圖:

Model First

模型優先是先建立數據模型,然後再根據模型生成相應的資料庫腳本,然後再根據腳本生成資料庫。

在項目中新增一個ADO.NET實體模型:OracleModel.edmx,選擇“空模型”,再新新建兩個實體:Destination與Lodging,如圖:

為了看清這兩個模型中屬性的數據類型,我把他們生成的類也貼出來一下:

View Code
 public partial class Destination
    {
        public Destination()
        {
            this.Lodging = new HashSet<Lodging>();
        }
    
        public int DestinationId { get; set; }
        public string Name { get; set; }
        public string Country { get; set; }
        public byte Photo { get; set; }
        public string Description { get; set; }
    
        public virtual ICollection<Lodging> Lodging { get; set; }
    }

 public partial class Lodging
    {
        public int LodgingId { get; set; }
        public string Name { get; set; }
        public string Owner { get; set; }
        public bool IsResort { get; set; }
        public decimal MilesFromNearestAirport { get; set; }
        public int DestinationDestinationId { get; set; }
    
        public virtual Destination Destination { get; set; }
    }

實體模型的空白處,右鍵-屬性,在打開的OracleModel模型屬性視窗,設置一些屬性,將DDL生成模板改成:SSDLToOracle.tt (VS),資料庫架構名稱改成:GYOUNG(這是我自己測試的Oracle資料庫的用戶名,大家可根據自己的更改),資料庫生成工作流改成:Generate Oracle Via T4 (TPT).xaml (VS)

為了讓EF更好的明白.NET中的數據類型與Oracle中數據類型間的對應關係。我們可以將下麵的配置文件加到app.config中。

  <oracle.dataaccess.client>
    <settings>
      <add name="bool" value="edmmapping number(1,0)" />
      <add name="byte" value="edmmapping number(3,0)" />
      <add name="int16" value="edmmapping number(4,0)" />
      <add name="int32" value="edmmapping number(9,0)" />
      <add name="int64" value="edmmapping number(18,0)" />
    </settings>
  </oracle.dataaccess.client>

現在我們就可以生成資料庫的相應腳本了。

在空白處右鍵,選擇“根據模型生成資料庫”

然後建立好數據連接,如圖:

點擊下一步,然後就會生成相應的數據腳本。

View Code
-- Creating table 'Destinations'
CREATE TABLE "GYOUNG"."Destinations" (
   "DestinationId" NUMBER(9,0) NOT NULL,
   "Name" NCLOB NOT NULL,
   "Country" NCLOB NOT NULL,
   "Photo" NUMBER(3,0) NOT NULL,
   "Description" NCLOB NOT NULL
);

-- Creating table 'Lodgings'
CREATE TABLE "GYOUNG"."Lodgings" (
   "LodgingId" NUMBER(9,0) NOT NULL,
   "Name" NCLOB NOT NULL,
   "Owner" NCLOB NOT NULL,
   "IsResort" NUMBER(1,0) NOT NULL,
   "MilesFromNearestAirport" NUMBER(38,0) NOT NULL,
   "DestinationDestinationId" NUMBER(9,0) NOT NULL
);


-- --------------------------------------------------
-- Creating all PRIMARY KEY constraints
-- --------------------------------------------------

-- Creating primary key on "DestinationId"in table 'Destinations'
ALTER TABLE "GYOUNG"."Destinations"
ADD CONSTRAINT "PK_Destinations"
   PRIMARY KEY ("DestinationId" )
   ENABLE
   VALIDATE;


-- Creating primary key on "LodgingId"in table 'Lodgings'
ALTER TABLE "GYOUNG"."Lodgings"
ADD CONSTRAINT "PK_Lodgings"
   PRIMARY KEY ("LodgingId" )
   ENABLE
   VALIDATE;


-- --------------------------------------------------
-- Creating all FOREIGN KEY constraints
-- --------------------------------------------------

-- Creating foreign key on "DestinationDestinationId" in table 'Lodgings'
ALTER TABLE "GYOUNG"."Lodgings"
ADD CONSTRAINT "FK_DestinationLodging"
   FOREIGN KEY ("DestinationDestinationId")
   REFERENCES "GYOUNG"."Destinations"
       ("DestinationId")
   ENABLE
   VALIDATE;

-- Creating index for FOREIGN KEY 'FK_DestinationLodging'
CREATE INDEX "IX_FK_DestinationLodging"
ON "GYOUNG"."Lodgings"
   ("DestinationDestinationId");

-- --------------------------------------------------
-- Script has ended
-- --------------------------------------------------

我們只要將腳本到資料庫中執行一下就可以生成相應的表了。分析一下生成的SQL語句,有主鍵,外鍵,但並沒有為主鍵設置自增長。Oracle設置自增長也是一個很蛋疼的問題,要通過設置相應的Sequences和Triggers來實現,習慣了SQL SERVER的IDENTITY,對於這個還真不爽。這裡我們不管它,就自己插入主鍵好了。下麵是測試代碼:

View Code
 using (OracleModelContainer context = new OracleModelContainer())
            {
                var destination = new Destination
                {
                    DestinationId=1,
                    Country = "Indonesia",
                    Description = "EcoTourism at its best in exquisite Bali",
                    Name = "Bali"
                };
                var lodging = new Lodging
                {
                    LodgingId=1,
                    Owner="Jshon",
                    Name = "Top Notch Resort and Spa",
                    MilesFromNearestAirport = 30,
                    IsResort=true,
                    Destination=destination
                };
                context.Lodgings.Add(lodging);
                context.SaveChanges();
            }

通過VS連接Oracle可以看到數據插入成功。

DB First

DB First顧名思義就是在先建好資料庫,再進行編程。我們新建一個項目,就以剛剛生成的那再張表來編程。

在新建項目中添加一個“ADO.NET 實體數據模型”:DBModel.edmx,選擇“從資料庫生成”

設置好連接串

選擇表

點擊完成,就會生成相應的模型。

我們來檢索一下剛剛插入的數據。

View Code
 using (Entities context = new Entities())
            {
                var des = context.Destinations.FirstOrDefault();
                var log = context.Lodgings.FirstOrDefault();
                Console.WriteLine("Lodging  Name:" + log.Name + " Owner:" + log.Owner);
                Console.WriteLine("Destination   Name:" + des.Name + " Country:" + des.Country);
            }

結果如圖。

PS:在DB First模式中,更要將Model First中所說的映射配置文件加入App.config中,不然很多數據類型映射會出錯。

 

偽Code First

見我的另一篇博客:Entity Framework Code First在Oracle下的偽實現

 


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

-Advertisement-
Play Games
更多相關文章
  • AspectCore Project 介紹 什麼是AspectCore Project ? "AspectCore Project" 是適用於 "Asp.Net Core" 平臺的輕量級 "Aop(Aspect oriented programming)" 解決方案,它更好的遵循Asp.Net Co ...
  • 本文版權歸博客園和作者吳雙本人共同所有. 寫在前面 這是一個數據爆發的網路時代,大家習慣於瀏覽圖文直觀帶給我們的快速信息。大圖片的存儲和瀏覽經常會成為Web伺服器的瓶頸。試想如果你的Web伺服器依然將大量圖片存儲在其本地,而單頁面主要的信息在於圖片列表,在訪問量增長後,一定會面臨帶寬、磁碟IO的瓶頸 ...
  • 參考頁面: http://www.yuanjiaocheng.net/ASPNET-CORE/core-middleware.html http://www.yuanjiaocheng.net/ASPNET-CORE/core-exception.html http://www.yuanjiaoch ...
  • 參考頁面: http://www.yuanjiaocheng.net/webapi/first.html http://www.yuanjiaocheng.net/webapi/web-api-gaisu.html http://www.yuanjiaocheng.net/webapi/create ...
  • 參考頁面: http://www.yuanjiaocheng.net/ASPNET-CORE/project-layout.html http://www.yuanjiaocheng.net/ASPNET-CORE/projectjson.html http://www.yuanjiaocheng. ...
  • 參考頁面: http://www.yuanjiaocheng.net/entity/entity-relations.html http://www.yuanjiaocheng.net/entity/entity-lifecycle.html http://www.yuanjiaocheng.net ...
  • 參考頁面: http://www.yuanjiaocheng.net/webapi/create-crud-api-1-delete.html http://www.yuanjiaocheng.net/webapi/Consume-web-api.html http://www.yuanjiaoch ...
  • 參考頁面: http://www.yuanjiaocheng.net/entity/entity-relations.html http://www.yuanjiaocheng.net/entity/entity-lifecycle.html http://www.yuanjiaocheng.net ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...