千呼萬喚始出來! Oracle官方版Entity Framework問市,邁入開發新時代

自從我得了一種"不用LINQ就不會寫資料庫程式"的病,為了滿足工作上要搭配Oracle(雖然我也是百般不願意)的需求,在官方遲遲不支援Entity Framework的情況下,只好求助於3rd Party產品

去年(2011)三月,Oracle總算良心發現,推出了ODAC Entity Framework Beta版,但這一杯塔就杯了近一年,遲遲等不到正式版問市。Beta版意味著"玩玩還可以,出包沒人理",無法真的推到實務專案中,還是沒解決問題。

終於,Oracle釋出ODAC 11.2 Release 4 Production Released with Entity Framework and LINQ Support!! 二話不說,立刻下載安裝。

安裝過程跟Oracle Client類似,在此不多著墨,值得一提的是發現了新東西,Oracle Database Extensions for .NET,其概念很像SQLCLR,意味著可用.NET寫Store Procedure、User Defined Function,並可在PL/SQL中直接引用呼叫。想到一堆用PL/SQL笨拙語法寫成的複雜Procedure可以用C#改寫,乍想之下令人頗為興奮,但很快就回歸現實: 第一,Database Extensions for .NET只適用於Oracle Database for Microsoft Windows,若規劃時大量採用,而實務環境資料庫卻都安裝在Unix平台就糗大了;第二,依架構來看,.NET寫的Procedure與Function被放在另一個獨立Process中執行,若涉及大量資料運算時,難免會有跨Process的資料傳輸,有效能上的疑慮。(這部分跟SQLCLR的特性限制類似) 因此在應用上有其限制,必須嚴選情境使用。

本想順便看看Database Extensions for .NET,但踢到了小鐵板! 由於在Oracle Server主機也要安裝ODAC(上圖紅框選項,Oracle Server主機選下方,其餘主機要選擇上方的for Oracle Client選項),安裝在手邊的Oracle Database Express Edition 11g Release 2(簡稱Oracle XE)時,爆出了版本必須為11.2.0.3的訊息,目前Oracle尚未提供11.2.0.3版XE,且即便是Oracle企業版,也得透過客服支援才能取得Patch升級到11.2.0.3版。再看了文件,可行的做法應是在Oracle XE上安裝11.1.0.6.20以後的ODAC,不必裝到11.2.0.3... 不過你知道的,我對Oracle的愛並沒有旺盛到想克服一切難關嚐鮮,所以... 以後再試囉~~ (關於Database Extensions for .NET,Oracle有篇不錯的逐步教學,值得一看)

回到主題,該來看看在Oracle Entity Framework推出後,Oracle資料庫相關程式的開發方式將有什麼改變?

傳統上.NET開發者在寫Oracle應用程式時,習慣會用Toad、PL/SQL Developer等工具查看資料表、Procedure等資訊,並在其中執行語法測試確認結果後,在Visual Studio中透過ODP.NET或System.Data.OracleClient建立OracleConnection、執行OracleCommand完成資料庫存取作業。

11.2.0.3版除了支援EF,還內附Oracle Developer Tools for Visual Studio(ODT),它也將改變傳統開發方式,透過與Visual Studio緊密結合,讓你可以直接在Visual Studio內完成許多資料庫相關工作,例如: 修改Schema、分析程式效能、測試及偵錯PL/SQL指令、管理User/Role/Privilege、將.NET類別轉成User-Defined Type、由Excel/SQL匯入資料表到Oracle... 等等。MSDN上有段簡介影片,看過之後,我想蟾蜍(Toad)的臉會綠掉,牠的飯碗被搶了! 原本需要第三方工具才能完成的事,現在可在Visual Studio直接搞定,用得還是熟悉的Visual Studio UI,帥呀~~

Oracle有篇詳盡的Entity Framework逐步教學,但對於未接觸過EF、LINQ的人稍稍複雜了點,故我用個更簡單的範例來展示"開發.NET Oracle應用程式的新時代做法"。在展示中,我們要在Oracle上新增一個資料表(Player),並寫一小段程式在其中新增一筆資料,再把它查詢出來。

1.請先安裝好ODAC 11.0.2.3 with Oracle Developer Tools for Visual Studio

2.建立一個.NET 4.0 Console Application專案

3.開啟Server Explorer

4.建立新連線,Data source選"Oracle Database (Oracle ODP.NET)",輸入識別名稱、帳號、密碼

5.連線建立後,可檢視Table/View/Procedure/Function (蟾蜍: 鳴~ 這原來是我的工作耶!), 
   新增PLAYER Table,新增欄位、選取資料型別...

6.也可指定Primary Key、Constraint、Index,按下Preview SQL可檢視CREATE TABLE Script,按下Save即建立資料表

7.在專案中新增ADO.NET Entity Data Model

8.選擇由現有資料表產生Model

9.選擇剛才建立的連線(JEFF.XE),並指定將連線字串存入Config中(在實務上連線字串應使用加密方式保存,正式上線的系統務必要留意這一點)

10.選取我們要為哪一個Table、View、Procedure建立Model類別,在這裡只有一個Table PLAYER 
    (Pluralize or singularize generated object names將決定PLAYER集合物件是否要寫成PLAYERs)

11.在建立好的Model(.edmx)中可以看到PLAYER Table

12.接下來是愉快的動手寫程式時間

程式很簡單,建立一個EF的Context(JeffEntities),宣告一個全新的PLAYER物件,指定各屬性(資料庫的每一個欄位都被映對到.NET類別中的一個屬性,奶油桂花手們再也不用擔心敲錯名稱抓蟲抓半天囉),將物件加入集合(ctx.PLAYER.AddObject),再ctx.SubmitChages()就會新增至資料庫!

至於查詢,此處則用Single(o => o.ID == 1)查詢剛才塞入的資料,ODP.NET會幫忙將其轉換成SELECT * FROM PLAYER WHERE ID = 1送到Oracle執行,查詢結果則會被轉成PLAYER類別,接著將它的NAME顯示出來證明查詢成功。

排版顯示純文字
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace OracleEF
{
    class Program
    {
        static void Main(string[] args)
        {
            using (JeffEntities ctx = new JeffEntities())
            {
                //新增一筆資料
                PLAYER p = new PLAYER()
                {
                    ID = 1,
                    NAME = "Jeffrey",
                    REGDATE = new DateTime(2012, 4, 1),
                    SCORE = 32767
                };
                ctx.PLAYER.AddObject(p);
                ctx.SaveChanges();
                //查詢資料
                var res = ctx.PLAYER.Single(o => o.ID == 1);
                Console.WriteLine(res.NAME);
            }
            Console.Read();
        }
    }
}

執行結果如下,順便用PL/SQL Developer驗證資料真的在資料庫中。

還在用Toad、OracleConnection、OracleCommand寫.NET程式嗎? 從現在起,試試Oracle Developer Tools + Entity Framework的新選擇吧!

Oracle官方版Entity Framework的更多相关文章

  1. 在Oracle中使用Entity Framework 6 CodeFirst

    项目中需要将系统从SQLServer数据库迁移到Oracle上.由于原大部分数据访问操作都是通过包装了Entity Framework的统一访问入口实现的,所以需要研究Entity Framework ...

  2. Oracle中使用Entity Framework 6.x Code-First

    Oracle中使用Entity Framework 6.x Code-First方式开发 去年写过一篇EF的简单学习笔记,当时EF还不支持Oracle的Code-First开发模式,今天无意又看了下O ...

  3. Oracle中使用Entity Framework 6.x Code-First方式开发

    去年写过一篇EF的简单学习笔记,当时EF还不支持Oracle的Code-First开发模式,今天无意又看了下Oracle官网,发现EF6.X已经支持了,并且给出了二篇教程(英文版): 1.Using ...

  4. 如何使用ASP.NET Web API OData在Oracle中使用Entity Framework 6.x Code-First方式开发 OData V4 Service

    环境: Visual Studio 2013 + .Net Framework 4.5.2 1.新建项目 2.安装OData,ODP.NET 安装的包: 下面是部分代码: using System; ...

  5. Entity Framework 6, database-first with Oracle

    Entity Framework 6, database-first with Oracle 转载自http://csharp.today/entity-framework-6-database-fi ...

  6. Entity Framework入门教程:什么是Entity Framework

    Entity Framework简介 Entity Framework是微软提供的一个O/RM(对象关系映射)框架.它基于ADO.NET,为开发人员提供了一种自动化的机制来访问和存储数据库中的数据. ...

  7. Entity Framework 6 自定义连接字符串ConnectionString连接MySQL

    在开始介绍之前,首先来看看官方对Entity Framework的解释:Entity Framework (EF) is an object-relational mapper that enable ...

  8. 使用Entity Framework Core访问数据库(Oracle篇)

    前言 哇..看看时间 真的很久很久没写博客了 将近一年了. 最近一直在忙各种家中事务和公司的新框架  终于抽出时间来更新一波了. 本篇主要讲一下关于Entity Framework Core访问ora ...

  9. Oracle 与 entity framework 6 的配置,文档

    官方文档: http://docs.oracle.com/cd/E56485_01/win.121/e55744/intro001.htm#ODPNT123 Oracle 对 微软 实体框架 EF6 ...

随机推荐

  1. Qt Assistant 的配置文件qhp--->qch 和qhcp--->qhc详解与生成

      Qt Assistant 这个exe文件可以被我们利用到我们自己的程序为我们添加help,是一个文档浏览器,它的搜索功能,还有最主要的就是他可以让客户自己定义自己索要显示的文档,也就是qch文档. ...

  2. Vue2.0环境搭建和测试demo

    Vue2.0 推荐开发环境 Homebrew 1.0.6(Mac).Node.js 6.7.0.npm 3.10.3.webpack 1.13.2.vue-cli 2.4.0.Atom 1.10.2 ...

  3. oracle函数Lpad与Rpad

    函数介绍 lpad函数从左边对字符串使用指定的字符进行填充.从其字面意思也可以理解,l是left的简写,pad是填充的意思,所以lpad就是从左边填充的意思. 语法格式如下: lpad( string ...

  4. 探究foreach对于迭代变量的封装性的研究

    众所周知教科书上对于foreach之中的注释是在遍历过程中无法改变其遍历的元素例如声明一个数组 ,,,}; foreach(int m in ii){ m = ;//错误 “m”是一个“foreach ...

  5. axure 8.0 动态特效库分享

    认准品牌 六脉神掌 尽量给每一个交互加上效果,尽量模拟真实的交互 无图无真相,我们先看效果图 1 这是还原Android Material Design风格的一个底部菜单效果 2 这个是模拟欢迎页面 ...

  6. Struts2中的ActionContext

    ActionContext(Action上下文) ActionContext介绍 通过上面用户注册例子的学习,我们知道Xwork与Web无关性,我们的Action不用去依赖于任何Web容器,不用和那些 ...

  7. SPOJ QTREE 系列解题报告

    题目一 : SPOJ 375 Query On a Tree http://www.spoj.com/problems/QTREE/ 给一个树,求a,b路径上最大边权,或者修改a,b边权为t. #in ...

  8. 数学期望和概率DP题目泛做(为了对应AD的课件)

    题1: Uva 1636 Headshot 题目大意: 给出一个000111序列,注意实际上是环状的.问是0出现的概率大,还是当前是0,下一个还是0的概率大. 问题比较简单,注意比较大小: A/C & ...

  9. httpd-vhosts.conf的配置

    <VirtualHost *:80> DocumentRoot "D:\product\web\Public" ServerName demo.web.com Dire ...

  10. Sad Angel (悲伤的天使)-Игорь Крутой

    悲伤的天使(neyanbhbin) -经典作曲Sad Angel( Печальныйангел)生活是一种连续的影响,每个小人物都有小人物的伟大故事.从开头的情侣,到美丽的丝带,从清洁老伯到卖气球的 ...