測試ODAC 11.2.0.3 + EF4自動跳號

剛好有網友提到ODAC 11.2.0.3 + EF4配合自動跳號的問題,之前曾用Devart EF元件實現過(且當時發現有SSDL無法自動更新的Bug),現在有了ODAC EF,又有Oracle Developer Tools for Visual Studio(ODT)加持,決定用新元件、新工具重新演練一次。

用ODT建立資料表上回就已示範,這次略過操作步驟,直接建好一個具有ID DECIMAL(10, 0), MTEXT VARCHAR2(100)兩個欄位的資料表MEMO。要在Oracle實現自動跳號,需要Sequence物件,而ODT提供設計Sequence的圖形化編輯介面:

下一步是為MEMO建立Trigger,在每次INSERT時,將ID欄位設為Sequence取出的下一次跳號,這部分一樣可透過ODT完成:

接著在專案中新增edmx,加入MEMO資料表,記得設定ID欄位的StoreGeneratedPattern屬性為Identity,註明它一個自動跳號識別欄位。

寫一小段程式測試連續新增。在建立MEMO物件時,只需指定MTEXT的值,ID的部分不需設定,理論上會啟用自動跳號機制。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace OracleEF
{
    class Program
    {
        static void Main(string[] args)
        {
            using (MyEntities ctx = new MyEntities())
            {
                MEMO m1 = new MEMO() { MTEXT = "Memo A1" };
                ctx.MEMO.AddObject(m1);
                ctx.SaveChanges();
                MEMO m2 = new MEMO() { MTEXT = "Memo A2" };
                ctx.MEMO.AddObject(m2);
                ctx.SaveChanges();
                foreach (var m in ctx.MEMO)
                {
                    Console.WriteLine("{0}.{1}", m.ID, m.MTEXT);
                }
            }
            Console.Read();
        }
    }
}

但程式在第二次ctx.SaveChanges()時爆出錯誤: ORA-00001: unique constraint (JEFF.PK_MEMO) violated

查詢資料表,發現出現一筆ID=0, MTEXT="Memo A1"的資料,推測是自動跳號失效,該不會又是老問題: EF4 StoreGeneratedPattern設定無效 重演吧? 那就用同樣的方法解決吧!

在.edmx檔按右鍵選"Open With...":

使用XML (Text) Editor開啟.edmx檔:

果不其然,在CSDL段有annotation:StoreGenerationPattern="Identity"(綠框處),但SSDL裡原本沒有紅框中的StoreGenerationPattern,要自己補上:

補上屬性後,重新執行程式,測試成功並順利新增兩筆資料。

測試結果: ODAC 11.2.0.3 + EF4 可支援自動跳號Primary Key,但VS2010 SP1有EF4 StoreGeneratedPattern設定無效 問題仍存在,故每次儲存edmx後記得要確認SSDL中的StoreGenerationPattern屬性。

歡迎推文分享:
Published 08 May 2012 06:08 AM 由 Jeffrey
Filed under: ,
Views: 8,124



意見

沒有意見

你的看法呢?

(必要的) 
(必要的) 
(選擇性的)
(必要的) 
(提醒: 因快取機制,您的留言幾分鐘後才會顯示在網站,請耐心稍候)

5 + 3 =

搜尋

Go

<May 2012>
SunMonTueWedThuFriSat
293012345
6789101112
13141516171819
20212223242526
272829303112
3456789
 
RSS
創用 CC 授權條款
【廣告】
twMVC

Tags 分類檢視
關於作者

一個醉心技術又酷愛分享的Coding魔人,十年的IT職場生涯,寫過系統、管過專案, 也帶過團隊,最後還是無怨無悔地選擇了技術鑽研這條路,近年來則以做一個"有為的中年人"自許。

文章典藏
其他功能

這個部落格


Syndication