千呼萬喚始出來! 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. Hacker(14)----扫描目标计算机端口

    端口是目前计算机与外界的通道,因而黑客一旦锁定目标计算机,便会扫描该计算机中已经开放的端口,从而得到更多的有用信息.扫描目标计算机端口一般使用SuperScan.X-Scan等. 一.端口扫描原理 扫 ...

  2. SQLLoader4(数据文件中的列与表中列不一致情况-filler)

    A.数据文件中字段个数少于表中列字段个数,但数据文件中缺少的列,在表定义中可以为空.----- 这种情况是比较简单的,只需要将数据文件中数据对应的列的名字写到控制文件中即可.因为SQL*Loader是 ...

  3. ASP.NET实现IE下禁用浏览器后退按钮办法

    在page_load方法里面增加如下代码: Response.Buffer = true; Response.ExpiresAbsolute = DateTime.Parse("2010-1 ...

  4. sql server 删除所有表和存储过程

    1.删除外键约束 DECLARE c1 cursor for select 'alter table ['+ object_name(parent_obj) + '] drop constraint ...

  5. asp.net利用Ajax和Jquery在前台向后台传参数并返回值

    1----------前台 首先需要 Jquer的包 <script src="js/jquery-1.9.1.js" type="text/javascript& ...

  6. IOS开发之程序执行状态更改

    1 前言 上节我们介绍了程序执行的状态,从例子中我们可以发现处理这些状态更改的时候有明确的策略可以遵循,这次我们就来介绍一下. 2 详述 2.1 活动->不活动 使用applicationWil ...

  7. (转)ubuntu 文件目录结构

    文件系统的类型 LINUX有四种基本文件系统类型:普通文件.目录文件.连接文件和特殊文件,可用file命令来识别. 1. 普通文件:如文本文件.C语言元代码.SHELL脚本.二进制的可执行文件等,可用 ...

  8. (转) launch failed.Binary not found in Linux/Ubuntu解决方案

    原地址: http://blog.csdn.net/abcjennifer/article/details/7573916 Linux下出现launch failed.Binary not found ...

  9. dropdownlist绑定和选中

    最近在使用dropdownlist控件,对于这个控件,目前我知道的会使用两种方式去绑定数据,现在将这两种方式分享给大家: 现在是后台数据绑定 protected void BindCarID() { ...

  10. centos 6.4从源码安装mysql 5.6笔记

    上周在安装mysql时遇到了些许麻烦,今天整理下. 在代码目录建立obj文件夹. 在obj目录下,执行cmake .. -DXXX  // XXX表示一些参数,详见http://dev.mysql.c ...